집 >데이터 베이스 >MySQL 튜토리얼 >왼쪽 조인 결과에서 행이 누락되는 이유는 무엇입니까?
왼쪽 조인 불일치: 행 생략
이 쿼리에서는 #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 중국어 웹사이트의 기타 관련 기사를 참조하세요!