Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation d'une jointure avec trois tables lorsqu'un champ peut être nul

Vous faites un INNER JOIN, mais vous avez besoin d'un OUTER JOIN, en particulier un LEFT JOIN. Avec un LEFT JOIN, la table "à gauche" est toujours jointe, et s'il n'y a pas de correspondance, les champs de la table à droite sont mis à null. La différence est très bien expliquée dans cette page wikipedia .

Ensuite, vous devez regrouper les lignes avec le même identifiant de soumission et compter le nombre de lignes qui ont été regroupées, en prenant soin que si une soumission n'a qu'un seul commentaire et une autre n'en a pas, elles ont toutes les deux 1 ligne groupée... Si une soumission n'a pas de commentaires , dans la requête suivante c.submissionid sera nul, donc

Votre SQL pourrait être

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

Il peut y avoir des erreurs, je n'ai pas testé la requête... Mais j'espère vous avoir donné la bonne idée, c'est la différence entre les jointures externes et les jointures internes.