Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL:COUNT mit GROUP BY, LEFT JOIN und WHERE-Klausel gibt keine Nullwerte zurück

Der Grund, warum es null Zeilen zurückgibt, ist, dass Sie nach einem Wert in table_1 gruppieren. Da es in table_1 keine Werte gibt, gibt es auch keine zurückzugebenden Zeilen. Anders gesagt, wenn Sie t1.any_col in Ihrer Abfrage von GROUP BY wie folgt zurückgegeben haben:

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` 

Was würde für t1.any_col angezeigt, wenn es keine Zeilen gäbe? Die einzige Möglichkeit, das zu erreichen, was Sie wollen, besteht darin, Ihre Ergebnisse mit einer anderen Abfrage zu vereinen, die nachgibt, ob in table_1 keine Zeilen vorhanden sind. In diesem Beispiel verwende ich die Ansicht INFORMATION_SCHEMA einfach, um etwas zu haben, das ich abfragen kann.

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