Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta de união do MySQL, ordem por 2 variáveis


O que você realmente precisa fazer é considerar seu esquema com mais cuidado. Considere nomear as colunas de data e hora da mesma forma e, em seguida, executar uma consulta como esta - http:/ /sqlfiddle.com/#!2/a3b4c/7/0
SELECT selection, id, datetimefoo, user FROM (
  SELECT 
    1 AS selection, 
    table1.id, table1.datetimefoo, 
    table3.user 
    FROM table1 
    LEFT OUTER JOIN table2 
    ON table1.id = table2.table1id
    LEFT OUTER JOIN table3
    ON table1.id = table3.id


  UNION

  SELECT 
    2 AS selection, 
    table1.id, table1.datetimefoo, 
    table3.user 
    FROM table1 
    INNER JOIN table2 
    ON table1.id = table2.table1id
    INNER JOIN table3
    ON table1.id = table3.id

  ) AS T2
ORDER BY datetimefoo DESC

No violino SQL, isso produz os resultados mais próximos do que você está procurando. Ainda não sei por que você precisa do INNER JOINS na segunda consulta - não há nada que você esteja fazendo aqui que os exija.

Aqui está outro método que não requer a alteração dos nomes das colunas, mas requer um alias para as colunas classificáveis ​​- http://sqlfiddle.com/#!2/ec4bc/3/0
SELECT * FROM (
  SELECT 
    1 AS selection, 
    table1.id, table1.datetimefoo AS sort_date, -- alias on first table's date
    table2.datetimebar,
    table3.user 
    FROM table1 
    LEFT OUTER JOIN table2 
    ON table1.id = table2.table1id
    LEFT OUTER JOIN table3
    ON table1.id = table3.id


  UNION

  SELECT 
    2 AS selection, 
    table1.id, table1.datetimefoo,
    table2.datetimebar AS sort_date, -- alias on second table's date
    table3.user 
    FROM table1 
    INNER JOIN table2 
    ON table1.id = table2.table1id
    INNER JOIN table3
    ON table1.id = table3.id

  ) AS T2
ORDER BY sort_date DESC