sql >> Base de Datos >  >> RDS >> Mysql

MYSQL:COUNT con GROUP BY, LEFT JOIN y la cláusula WHERE no devuelve valores cero

La razón por la que devuelve cero filas es que está agrupando en un valor en table_1. Dado que no hay valores en table_1, no hay filas para devolver. Dicho de otra manera, si devolviste t1.any_col en tu consulta desde GROUP BY así:

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é mostraría para t1.any_col cuando no hubiera filas? La única forma de lograr lo que desea es unir sus resultados con otra consulta que no verifique filas en table_1. En este ejemplo, estoy usando la vista INFORMACION_ESQUEMA simplemente para tener algo contra lo que pueda 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