문제

각 유형의 레코드 수를 계산하여 두 테이블에 가입하고 싶습니다. 왼쪽 테이블에 해당 유형의 레코드가 없으면 널이 아닌 0을 반환하기를 원합니다.

어떻게 할 수 있습니까?

도움이 되었습니까?

해결책

사용:

ISNULL(count(*), 0)

다른 팁

정확한 문제를 이해했는지 확실하지 않지만 왼쪽 조인의 SQLServer에서 쿼리가 다음과 같은 경우 0으로 계산됩니다.

select t1.id, count(t2.id)
from table1 t1
left outer join table2 t2
on t1.id = t2.id
group by t1.id

ISNULL(nullable, value_if_null) MSSQL의 경우 COALESCE(nullable1, nullable2, ..., value_if_null) MySQL을 위해.

편집하다:내가 말했듯이 COALESCE 둘 다를 위해 작동하므로 교체하기로 선택했습니다. NULL 열.

이제 나는 그렇게 생각합니다 COUNT()NULL 값은 반환됩니다 0 MySQL에서도 Rashmi에 동의합니다. 쿼리와 원하는 결과를 보여 주시겠습니까?

"케이스"를 사용할 수 있습니다.

SELECT T1.NAME, CASE WHEN T2.DATA IS NULL THEN 0 ELSE T2.DATA END
FROM T1 LEFT JOIN T2 ON T1.ID = T2.ID

보다 ISNULL SQL Server에서 Sybase. 사용 NVL 오라클에서.

Coalesce는 ISNULL 또는 NVL보다 교차 호환성입니다 (MSSQL, Oracle, MySQL, Derby 등에서 작동 함). 그러나 성능 차이에 대해서는 확실하지 않습니다.

COALESCE(XXX, 0)

예를 들어

SELECT branch1_id, branch1_name, COALESCE(devnum, 0) FROM
    branch1 as S LEFT JOIN view_inner_zj_devnum as B ON S.branch1_id = B.bid1 GROUP BY branch1_id;

그것은 나를 위해 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top