sql >> Database teknologi >  >> RDS >> Mysql

MYSQL:COUNT med GROUP BY, LEFT JOIN og WHERE-sætning returnerer ikke nulværdier

Grunden til at det returnerer nul rækker er, at du grupperer på en værdi i tabel_1. Da der ikke er nogen værdier i tabel_1, er der ingen rækker at returnere. Sagt på en anden måde, hvis du returnerede t1.any_col i din forespørgsel fra GROUP BY sådan:

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` 

Hvad ville blive vist for t1.any_col, når der ikke var nogen rækker? Den eneste måde at opnå det, du ønsker, er at forene dine resultater med en anden forespørgsel, der kontrollerer, om der ikke er nogen rækker i tabel_1. I dette eksempel bruger jeg visningen INFORMATION_SCHEMA simpelthen for at have noget, jeg kan forespørge 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. 7 måder at finde duplikerede rækker i SQL Server, mens du ignorerer enhver primær nøgle

  2. Hvad er den hurtigste måde at vælge nærmeste geografiske sted fra mysql-databasen?

  3. Foreach loop bruger streng til at udlæse XML

  4. Vælg objekt oprettet mellem to datoer af Bookshelf, MySQL, Knex på node.js