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

MYSQL:COUNT avec la clause GROUP BY, LEFT JOIN et WHERE ne renvoie pas de valeurs nulles

La raison pour laquelle il ne renvoie aucune ligne est que vous effectuez un regroupement sur une valeur dans table_1. Puisqu'il n'y a pas de valeurs dans table_1, il n'y a pas de lignes à renvoyer. En d'autres termes, si vous renvoyez t1.any_col dans votre requête à partir du GROUP BY comme suit :

SELECT `t1`.`any_col`, 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` 

Qu'est-ce qui s'afficherait pour t1.any_col s'il n'y avait pas de lignes ? La seule façon d'obtenir ce que vous voulez est d'unir vos résultats avec une autre requête qui ne vérifie aucune ligne dans table_1. Dans cet exemple, j'utilise la vue INFORMATION_SCHEMA simplement pour avoir quelque chose sur lequel je peux interroger.

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` 
UNION ALL
SELECT 0
FROM INFORMATION_SCHEMA.TABLES
Where Not Exists( Select 1 From `table_1` )
LIMIT 1