>데이터 베이스 >MySQL 튜토리얼 >SQL의 LEFT JOIN이 예기치 않은 결과를 반환하는 이유는 무엇입니까?

SQL의 LEFT JOIN이 예기치 않은 결과를 반환하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-31 14:52:14889검색

Why is My LEFT JOIN in SQL Returning Unexpected Results?

LEFT JOIN 이해: SQL 쿼리가 예상 결과를 반환하지 않는 이유

SQL에서 LEFT JOIN을 활용할 때 고유한 특성과 잠재적인 함정을 인식하는 것이 중요합니다. . 이 질문은 LEFT JOIN 쿼리가 예상치 못한 결과를 반환하는 예를 보여 주며, 이는 기본 메커니즘을 자세히 조사하고 문제를 해결하라는 메시지를 표시합니다.

LEFT JOIN 작업은 왼쪽 테이블에서 모든 행을 검색합니다(이 경우 #appSteps) 올바른 테이블(#appProgress)과 일치하는지 여부에 관계 없습니다. 오른쪽 테이블에서 일치하지 않는 행에는 NULL 값이 할당됩니다. 그러나 WHERE 절(p.appId = 101)에 올바른 테이블을 포함하면 본질적으로 쿼리가 INNER JOIN으로 변환됩니다.

해결책:

문제를 해결하려면 올바른 테이블(p.appId = 101)을 필터링하는 조건자를 WHERE 절에서 이동해야 합니다. LEFT JOIN 문의 ON 조건에. 이렇게 하면 조인을 수행하기 전에 올바른 테이블을 필터링하여 일치하는 행만 포함되도록 합니다.

조정된 SQL 문은 다음과 같습니다.

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 기능을 올바르게 활용하면 실수로 행을 제외하지 않고 #appSteps의 null이 아닌 모든 행과 #appProgress의 일치하는 행을 포함하여 예상된 결과를 얻을 수 있습니다. WHERE 절에 추가 술어가 있습니다.

위 내용은 SQL의 LEFT JOIN이 예기치 않은 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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