집 >데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 LEFT JOIN이 0 카운트를 반환하지 않는 이유는 무엇입니까?
PostgreSQL LEFT JOIN: 0 카운트 반환 보장
PostgreSQL LEFT JOIN
의 일반적인 문제는 개수가 0인 행을 반환하지 못하는 것입니다. 필터링 조건이 잘못 배치되었을 때 발생하는 현상입니다.
조직당 시험 항목 수를 계산하도록 설계되었지만 개수가 0보다 큰 조직만 반환하도록 설계된 다음 쿼리를 고려해보세요.
<code class="language-sql">select o.name as organisation_name, coalesce(COUNT(exam_items.id)) as total_used from organisations o left join exam_items e on o.id = e.organisation_id where e.item_template_id = #{sanitize(item_template_id)} and e.used = true group by o.name order by o.name</code>
쿼리 수정
문제는 WHERE
절에 있습니다. 여기에 배치된 조건은 가입 다음을 필터링하여 개수가 0인 조직을 효과적으로 제거합니다. 해결책은 필터링 조건을 JOIN
절 자체로 옮기는 것입니다:
<code class="language-sql">SELECT o.name AS organisation_name, count(e.id) AS total_used FROM organisations o LEFT JOIN exam_items e ON e.organisation_id = o.id AND e.item_template_id = #{sanitize(item_template_id)} AND e.used GROUP BY o.name ORDER BY o.name;</code>
JOIN
내에 필터를 통합하여 일치하는 행만 조인 작업에 포함되도록 합니다. 이렇게 하면 개수가 0인 조직이 실수로 제외되는 것을 방지할 수 있습니다.
중요 사항:
COUNT()
의 동작: 많은 집계 함수와 달리 COUNT()
은 NULL
을 반환하지 않습니다. 따라서 COALESCE(COUNT(col))
은 중복됩니다.COUNT()
열에 NOT NULL
을 적용하거나 조인 조건이 Null이 아닌 값을 보장하는지 확인하세요.위 내용은 PostgreSQL에서 LEFT JOIN이 0 카운트를 반환하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!