LEFT OUTER JOIN 문제: 레코드 수가 왼쪽 테이블을 초과합니까?
LEFT OUTER JOIN은 항상 왼쪽 테이블의 모든 레코드를 반환한다는 것이 일반적으로 인정되지만, 쿼리가 예상보다 많은 결과를 반환하자 한 사용자는 혼란스러워했습니다.
문제의 SQL 쿼리:
SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID FROM SUSP.Susp_Visits LEFT OUTER JOIN DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
진실 밝히기:
오해는 LEFT OUTER JOIN이 왼쪽 테이블의 일치하지 않는 행에 대해서만 NULL 값을 반환한다고 가정하는 것입니다. 실제로 오른쪽 테이블의 여러 행이 왼쪽 테이블의 행과 일치하더라도 일치하는 모든 행을 반환합니다.
예:
다음 형식을 고려하세요.
**Susp_Visits** | **Dim_Member** | |
---|---|---|
MemID: 1 | MembershipNum: 1 | |
MemID: 1 | MembershipNum: 2 | |
MemID: 2 | MembershipNum: NULL |
MemID를 기반으로 한 LEFT OUTER JOIN은 다음과 같은 결과를 생성합니다.
**SuspReason** | **SiteID** | **MembershipNum** |
---|---|---|
1 | 1 | 1 |
1 | 1 | 2 |
2 | 2 | NULL |
보시다시피 Susp_Visits.SuspReason이 1인 행은 Dim_Member의 두 행과 일치하기 때문에 중복됩니다.
대안:
원하는 결과가 왼쪽 테이블에서 고유한 행만 검색하는 것이라면 LEFT OUTER JOIN이 필요하지 않습니다. 왼쪽 테이블에서 간단한 SELECT를 수행해 보세요.
SELECT SuspReason, SiteID FROM SUSP.Susp_Visits
위 내용은 왼쪽 외부 조인 퍼즐 : 왼쪽 테이블 레코드보다 더 많은 결과가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!