>데이터 베이스 >MySQL 튜토리얼 >왼쪽 조인 결과에서 행이 누락되는 이유는 무엇입니까?

왼쪽 조인 결과에서 행이 누락되는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-04 09:33:35368검색

Why are Rows Missing from my Left Join Result?

왼쪽 조인 불일치: 행 생략

이 쿼리에서는 #appSteps 테이블과 #appProgress 테이블 간의 LEFT JOIN이 제대로 작동하지 않아 결과에서 예상 행 제외 set.

질문 쿼리:

select p.appId, s.stepId, s.section, p.start
from #appSteps s with (nolock)
left join #appProgress p on s.stepId = p.stepId
where s.section is not null
and p.appId = 101

예상 결과:

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000
101 10 Section 3 NULL

실제 결과:

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000

해결 방법:

WHERE 절에 오른쪽 테이블(#appProgress)을 포함하면 잘못된 동작이 발생합니다. 이 조건을 LEFT JOIN의 ON 절로 이동하면 원하는 결과를 얻을 수 있습니다.

Select    P.appId, S.stepId, S.section, P.start
From      #appSteps    S   With (NoLock)
Left Join #appProgress P   On  S.stepId = P.stepId 
                           And P.appId = 101
Where     S.section Is Not Null

LEFT JOIN에서는 조인 후에 WHERE 절이 실행됩니다. 즉, 오른쪽부터 행이 WHERE 절 기준을 충족하지 않는 핸드 테이블은 결과 집합에서 제외됩니다. WHERE 절에 오른쪽 테이블을 포함하면 효과적으로 INNER JOIN으로 변환되어 예상 결과가 필터링됩니다.

위 내용은 왼쪽 조인 결과에서 행이 누락되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.