Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di un join con tre tabelle quando un campo potrebbe essere nullo

Stai facendo un INNER JOIN, ma hai bisogno di un OUTER JOIN, in particolare un LEFT JOIN. Con un LEFT JOIN la tabella "a sinistra" è sempre unita, e se non c'è corrispondenza i campi della tabella a destra sono nulli. La differenza è spiegata molto bene in questa pagina di Wikipedia .

Quindi devi raggruppare le righe con lo stesso ID di invio e contare quante righe sono state raggruppate, facendo attenzione che se un invio ha solo un commento e un altro non ne ha, entrambi hanno 1 riga raggruppata... Se un invio non ha commenti , nella query successiva c.submissionid sarà nullo, quindi

Il tuo SQL potrebbe essere

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

Potrebbero esserci degli errori, non ho testato la query... Ma spero di averti dato l'idea giusta, ovvero la differenza tra outer join e inner join.