>데이터 베이스 >MySQL 튜토리얼 >내 왼쪽 외부 결합이 왼쪽 테이블보다 더 많은 레코드를 반환하는 이유는 무엇입니까?

내 왼쪽 외부 결합이 왼쪽 테이블보다 더 많은 레코드를 반환하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-25 01:11:08141검색

Why Does My Left Outer Join Return More Records Than the Left Table?

왼쪽 외부 조인과 예상치 못한 행 개수: 자세히 살펴보기

SQL 데이터베이스에서 왼쪽 외부 조인은 두 테이블의 데이터를 결합하여 결과 집합에 왼쪽 테이블의 모든 행이 포함되도록 보장합니다. 그러나 일반적인 오해는 출력이 항상 왼쪽 테이블과 동일한 수의 행을 갖는다는 것입니다. 반드시 그런 것은 아닙니다.

왼쪽 외부 조인의 동작은 왼쪽 테이블의 각 행을 오른쪽 테이블의 해당 행과 일치시키는 것입니다. 일치하는 항목이 발견되면 두 테이블의 데이터가 단일 행으로 결합됩니다. 결정적으로, 왼쪽 테이블의 특정 행에 대해 오른쪽 테이블에서 일치하는 항목이 없음인 경우 해당 왼쪽 테이블 행은 여전히 ​​결과에 포함되지만 오른쪽 테이블의 열에 대한 값은 NULL입니다. .

왼쪽 표의 단일 행이 오른쪽 표의 여러 행과 일치하면 불일치가 발생합니다. 이 경우 왼쪽 외부 조인은 출력에서 ​​오른쪽의 각 일치 항목에 대해 하나씩 여러 행을 생성하여 원래 왼쪽 테이블의 행 개수를 초과하게 됩니다.

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>

이 쿼리는 SUSP.Susp_Visits에서만 데이터를 검색하려고 합니다. 그러나 MemIDSUSP.Susp_VisitsDATA.Dim_Member의 여러 항목에 해당하는 경우 결과에는 각 SUSP.Susp_Visits 행에 대해 여러 행이 포함됩니다.

행 개수가 부풀려지는 것을 방지하고 왼쪽 테이블의 데이터만 검색하려면 더 간단한 쿼리를 사용하는 것이 좋습니다.

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

이 직접 쿼리는 테이블 간의 일대다 관계를 처리할 때 왼쪽 외부 조인 동작에 내재된 행 수 불일치 가능성 없이 원하는 데이터를 효율적으로 검색합니다.

위 내용은 내 왼쪽 외부 결합이 왼쪽 테이블보다 더 많은 레코드를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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