>데이터 베이스 >MySQL 튜토리얼 >왼쪽 외부 조인 퍼즐 : 왼쪽 테이블 레코드보다 더 많은 결과가 있습니까?

왼쪽 외부 조인 퍼즐 : 왼쪽 테이블 레코드보다 더 많은 결과가 있습니까?

DDD
DDD원래의
2025-01-25 01:26:09512검색

LEFT OUTER JOIN Puzzle: Why More Results Than Left Table Records?

LEFT OUTER JOIN 문제: 레코드 수가 왼쪽 테이블을 초과합니까?

LEFT OUTER JOIN은 항상 왼쪽 테이블의 모든 레코드를 반환한다는 것이 일반적으로 인정되지만, 쿼리가 예상보다 많은 결과를 반환하자 한 사용자는 혼란스러워했습니다.

문제의 SQL 쿼리:

<code class="language-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</code>

진실 밝히기:

오해는 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를 수행해 보세요.

<code class="language-sql">SELECT     
    SuspReason, SiteID
FROM
    SUSP.Susp_Visits</code>

위 내용은 왼쪽 외부 조인 퍼즐 : 왼쪽 테이블 레코드보다 더 많은 결과가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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