Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL:COUNT com GROUP BY, LEFT JOIN e cláusula WHERE não retorna valores zero


A razão pela qual ele retorna zero linhas é que você está agrupando em um valor em table_1. Como não há valores em table_1, não há linhas para retornar. Dito de outra forma, se você retornou t1.any_col em sua consulta do GROUP BY assim:
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` 

O que seria exibido para t1.any_col quando não houvesse linhas? A única maneira de conseguir o que você deseja é unir seus resultados com outra consulta que não verifique se não há linhas na tabela_1. Neste exemplo, estou usando a visualização INFORMATION_SCHEMA simplesmente para ter algo em relação ao qual eu possa consultar.
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