반응형
나는 이것이 매우 간단한 대답을 가지고 있다고 확신하지만 그것을 찾을 수없는 것 같습니다 (무엇을 검색해야할지 모르겠습니다!). 쿼리 별 표준 개수 / 그룹은 다음과 같습니다.
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
그리고 이것은 예상대로 작동하며 행이 없으면 0을 반환합니다. 하나:
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`
table_1에 적어도 하나의 행이있는 경우에만 작동하고 0 개의 행이 있으면 빈 결과 집합을 반환하는 데 실패합니다. 0을 반환하고 싶습니다! 누구든지 이것에 대해 나를 계몽합니까? 런던에있는 경우 맥주를 대가로 제공 할 수 있습니다 ;-)
해결 방법
0 행을 반환하는 이유는 table_1의 값을 기준으로 그룹화하기 때문입니다. table_1에 값이 없기 때문에 반환 할 행이 없습니다. 다른 방법으로 말하면 다음과 같이 GROUP BY에서 쿼리에 t1.any_col을 반환 한 경우 :
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에 대해 무엇을 표시합니까? 원하는 것을 달성하는 유일한 방법은 table_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
참조 페이지 https://stackoverflow.com/questions/2730273
반응형
'MySql' 카테고리의 다른 글
MySQL SQLite INSERT-ON DUPLICATE KEY UPDATE (UPSERT) (0) | 2020.11.28 |
---|---|
MySQL WAMP 용 MySQL 데이터베이스 파일은 어디에 있습니까? (0) | 2020.11.28 |
MySQL Bash : 명령을 호출하고 결과를 변수에 저장하는 방법은 무엇입니까? (0) | 2020.11.28 |
MySQL 문자열을 SQL 시간으로 캐스팅 (0) | 2020.11.28 |
MySQL 단일 데이터베이스에서 테이블 이름을 필터링 할 수 있어야합니까? (0) | 2020.11.28 |
댓글