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

Używanie sprzężenia z trzema tabelami, gdy pole może mieć wartość NULL

Robisz INNER JOIN, ale potrzebujesz OUTER JOIN, w szczególności LEFT JOIN. Z LEFT JOIN, tabela "po lewej" jest zawsze łączona, a jeśli nie ma korespondencji, pola tabeli po prawej są ustawiane na null. Różnica jest bardzo dobrze wyjaśniona na tej stronie Wikipedii .

Następnie musisz pogrupować wiersze o tym samym identyfikatorze zgłoszenia i policzyć, ile wierszy zostało zgrupowanych, uważając, aby jeśli jedno zgłoszenie zawierało tylko jeden komentarz, a inne nie ma żadnego, oba mają po jednym zgrupowanym wierszu... Jeśli jedno zgłoszenie nie zawiera komentarzy , w następnym zapytaniu c.submissionid będzie zerem, więc

Twój SQL może być

SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid, 
IF(c.submissionid IS NULL, 0, COUNT(*))  AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10

Mogą być błędy, nie testowałem zapytania... Ale mam nadzieję, że podsunąłem Ci właściwy pomysł, czyli różnicę między złączeniami zewnętrznymi i wewnętrznymi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Praca ze zdarzeniami w MySQL

  2. Jak zapisać wynik zapytania MySQL w zmiennej w c

  3. Podstawowe połączenie PDO z MySQL

  4. Przechowuj obrazy w bazie danych MySQL

  5. mysql duplikaty z LOAD DATA INFILE