sql >> Databasteknik >  >> RDS >> Mysql

MYSQL:COUNT med GROUP BY, LEFT JOIN och WHERE-satsen returnerar inte nollvärden

Anledningen till att den returnerar noll rader är att du grupperar på ett värde i tabell_1. Eftersom det inte finns några värden i tabell_1 finns det inga rader att returnera. Sagt på ett annat sätt, om du returnerade t1.any_col i din fråga från GROUP BY så här:

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` 

Vad skulle visas för t1.any_col när det inte fanns några rader? Det enda sättet att uppnå det du vill är att kombinera dina resultat med en annan fråga som kontrollerar om det inte finns några rader i table_1. I det här exemplet använder jag vyn INFORMATION_SCHEMA helt enkelt för att ha något som jag kan fråga efter.

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


  1. SQLite MIN

  2. SQL-syntaxfel - Haversine-formel

  3. Finns det praxis/riktlinjer för att skapa icke-normaliserade tabeller under normaliseringsprocessen?

  4. mysql räkna rader med loop