Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Łączenie dwóch zapytań w jedno

Jeśli istniejące zapytania robią to, czego chcesz/potrzebujesz, UNION sprawi, że połączenie ich będzie całkiem proste, na przykład;

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

Należy pamiętać, że aby związek działał, należy wybrać tę samą liczbę/kolejność kolumn z obu zapytań. SELECT * utrudnia sprawdzenie, czy tak jest. Jeśli



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można połączyć się z mysql pod w Kubernetes podczas używania obiektów tajnych jako hasła (odmowa dostępu)

  2. Wybierz wyraźne pierwsze słowa pola

  3. Zmiana nazw kolumn kluczy obcych w MySQL

  4. jak nadać uprawnienia MySQL tylko do określonego wiersza

  5. mysql innodb współbieżność transakcji