Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL:COUNT с GROUP BY, LEFT JOIN и клаузата WHERE не връща нулеви стойности

Причината да връща нула редове е, че групирате по стойност в таблица_1. Тъй като в таблица_1 няма стойности, няма редове за връщане. Казано по друг начин, ако сте върнали t1.any_col в заявката си от GROUP BY така:

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` 

Какво ще се покаже за t1.any_col, когато няма редове? Единственият начин да постигнете това, което искате, е да обедините резултатите си с друга заявка, която проверява за липса на редове в таблица_1. В този пример използвам изгледа INFORMATION_SCHEMA просто за да имам нещо, спрямо което мога да направя запитване.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Незаконен микс от съпоставяния за операция „concat“

  2. Изчисляване кои точки (ширина, дължина) са на определено разстояние в mysql?

  3. Най-добрата структура за релационна база данни със статии и тагове

  4. защо mysqld се намира на 4 места в linux система?

  5. JSON_STORAGE_SIZE() – Намерете размера на съхранение на JSON документ в MySQL