Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden eines Joins mit drei Tabellen, wenn ein Feld möglicherweise null ist

Sie machen einen INNER JOIN, aber Sie brauchen einen OUTER JOIN, insbesondere einen LEFT JOIN. Bei einem LEFT JOIN wird immer die "linke" Tabelle verknüpft und bei fehlender Übereinstimmung werden die Felder der rechten Tabelle auf null gesetzt. Der Unterschied wird auf dieser Wikipedia-Seite sehr gut erklärt .

Dann müssen Sie die Zeilen mit derselben Einreichungs-ID gruppieren und zählen, wie viele Zeilen gruppiert wurden, wobei darauf zu achten ist, dass, wenn eine Einreichung nur einen Kommentar hat und eine andere keinen, beide eine gruppierte Zeile haben ... Wenn eine Einreichung keine Kommentare hat , in der nächsten Abfrage c.submissionid wird null sein, also

Ihr SQL könnte sein

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

Es können Fehler auftreten, ich habe die Abfrage nicht getestet... Aber ich hoffe, Ihnen die richtige Idee gegeben zu haben, das ist der Unterschied zwischen äußeren Joins und inneren Joins.