sql >> Database >  >> RDS >> Mysql

MYSQL:COUNT met GROUP BY, LEFT JOIN en WHERE-clausule retourneert geen nulwaarden

De reden dat het nul rijen retourneert, is dat u groepeert op een waarde in table_1. Aangezien er geen waarden in table_1 zijn, zijn er geen rijen om te retourneren. Anders gezegd, als je t1.any_col retourneerde in je zoekopdracht van de GROUP BY als volgt:

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` 

Wat zou er voor t1.any_col worden weergegeven als er geen rijen waren? De enige manier om te bereiken wat u wilt, is door uw resultaten te verenigen met een andere zoekopdracht die controleert op geen rijen in tabel_1. In dit voorbeeld gebruik ik de INFORMATION_SCHEMA-weergave om iets te hebben waar ik op kan zoeken.

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. Alternatief voor FIND_IN_SET in SQLite?

  2. mysqli db-back-up met php

  3. sqlLiteDatabase.query() voor INNER JOIN

  4. Twee gegenereerde waarden in de leer