Je suis sûr que cela a une réponse très simple, mais je n'arrive pas à la trouver (je ne sais pas quoi chercher!) . Un compte/groupe standard par requête peut ressembler à ceci:MYSQL: COUNT avec GROUP BY, LEFT JOIN et la clause WHERE ne renvoie pas de valeurs
SELECT COUNT(`t2`.`name`)
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123
et cela fonctionne comme prévu, le retour 0 si aucune ligne se trouvent. Cependant:
SELECT COUNT(`t2`.`name`)
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123
GROUP BY `t1`.`any_col`
ne fonctionne que s'il y a au moins une rangée dans table_1 et échoue lamentablement retourner un jeu de résultats vide s'il n'y a aucune ligne. Je voudrais vraiment que cela retourne 0! Quelqu'un m'éclaire-t-il là-dessus? La bière peut être fournie en échange si vous êtes à Londres ;-)
Pourquoi le premier exemple fonctionne-t-il bien? Tout ce qui manque est la clause WHERE, il ne peut toujours pas y avoir de lignes et ça marchera très bien ... –
@Paul Norman - Le premier exemple fonctionne car il y a clairement des lignes dans la table_1. Le troisième exemple ne fonctionne pas car, apparemment, il n'y a pas de lignes dans table_1 qui ont une valeur 123 pour 'another_column'. Si la requête sans le regroupement ne renvoie aucune ligne, elle ne renverra pas de lignes avec le regroupement. – Thomas