sql >> Databasteknik >  >> RDS >> Mysql

Kombinera två frågor till en

Om de befintliga frågorna gör vad du vill/behöver, UNION kommer att göra det ganska enkelt att kombinera dem, något i stil med;

SELECT * FROM (
    SELECT is_private 0, <field1>,<field2>,<field3>, ... ,(SELECT COUNT(*) 
               FROM votes 
               WHERE message_id = m.message_id
                 AND vote_type = 'like') AS likes,
              (SELECT COUNT(*) 
               FROM votes
               WHERE message_id = m.message_id 
               AND vote_type = 'dislike') AS dislikes 
    FROM messages m
    WHERE 1 #and hidden is null
      and recipient_id = 1
    UNION ALL
    SELECT 1, <field1>, <field2>, <field3>, ... ,(SELECT COUNT(*) 
               FROM votes 
               WHERE message_id = m.message_id
                 AND vote_type = 'like') AS likes,
              (SELECT COUNT(*)
               FROM votes
               WHERE message_id = m.message_id  
                 AND vote_type = 'dislike') AS dislikes 
    FROM private_messages m 
    WHERE 1 #and hidden is null 
      and recipient_id = 1 
)
ORDER BY datetime DESC

Observera att du måste välja samma antal/ordning kolumner från båda frågorna för att facket ska fungera. SELECT * gör det svårt att kontrollera om/att så är fallet. Om



  1. oracle plsql:hur man analyserar XML och infogar i tabellen

  2. Hur infogar man en enorm Panda-dataram i MySQL-tabellen med Parallell Insert Statement?

  3. Django anpassad unik tillsammans begränsning

  4. Varför och när en LEFT JOIN med villkor i WHERE-satsen inte motsvarar samma LEFT JOIN i ON?