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

Spojení dvou dotazů do jednoho

Pokud existující dotazy dělají to, co chcete/potřebujete, UNION bude docela jednoduché je kombinovat, něco jako;

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

Všimněte si, že musíte vybrat stejný počet/pořadí sloupců z obou dotazů, aby sjednocení fungovalo. SELECT * ztěžuje ověření, zda/že tomu tak je. Pokud



  1. Oracle get datum formátované jako řetězec mezi dvěma daty

  2. Jak předat XML jako parametr do uložené procedury v Oracle

  3. Vylučovací řádek MySQL

  4. Efektivní způsob získání @@rowcount z dotazu pomocí row_number