sql >> Databáze >  >> RDS >> Mysql

Sjednocovací dotaz MySQL, pořadí podle 2 proměnných

Co opravdu musíte udělat, je pečlivěji zvážit své schéma. Zvažte pojmenování sloupců data a času stejně a poté spusťte dotaz jako je tento – 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

V houslích SQL to přináší výsledky blíže k tomu, co hledáte. Stále si nejsem jistý, proč potřebujete INNER JOINS na druhý dotaz - není tu nic, co byste zde dělali, co by je vyžadovalo.

Zde je další metoda, která nevyžaduje změnu názvů sloupců, ale vyžaduje alias pro seřaditelné sloupce - 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


  1. instalace postgres selhala inicializace databázového clusteru ( Postgresql verze 9.4.4 )

  2. Návratová hodnota uložené procedury MySQL

  3. Příkaz SQL - SELECT inverzní k tomuto dotazu

  4. Jak rozdělit řetězec po určitém znaku v SQL Server a aktualizovat tuto hodnotu na konkrétní sloupec