sql >> Database >  >> RDS >> Mysql

MySQL Union-query, volgorde op 2 variabelen

Wat u echt moet doen, is uw schema zorgvuldiger overwegen. Overweeg om de datum-tijdkolommen dezelfde naam te geven en vervolgens een zoekopdracht als deze uit te voeren - 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

In de SQL-viool levert dit de resultaten op die dichter in de buurt komen van wat u zoekt. Ik weet nog steeds niet zeker waarom je de INNER JOINS nodig hebt bij de tweede vraag - er is niets dat je hier doet waarvoor ze nodig zijn.

Hier is een andere methode die geen wijziging van de kolomnamen vereist, maar een alias vereist voor de sorteerbare kolommen - 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. REGEXP_REPLACE - verwijder komma's ALLEEN uit tekenreeks als deze is ingesloten tussen ()'s

  2. Hoe gegevens in sqlalchemy per lijst te bestellen

  3. SQL Server:gesplitste bewerking

  4. Inhuren of aangenomen worden:een gegevensmodel voor het wervingsproces