왼쪽 왼쪽 외부 결합 예기치 않은 동작 : 왼쪽 테이블보다 더 많은 행
왼쪽 외부 결합에 대한 일반적인 오해는 결과 세트가 항상 왼쪽 테이블과 동일하거나 적은 행을 갖는 것입니다. 그러나 이것이 항상 사실은 아닙니다. 행의 수는 특정 조건에서 왼쪽 테이블의 행 카운트를 초과 할 수 있습니다.
이 문제는 "sport.susp_visits"(왼쪽 테이블)와 "data.dim_member"(오른쪽 테이블) 사이의 왼쪽 외부 조인을 사용하여 쿼리에서 관찰되었습니다. 결합 된 결과는 "SUST.SUSP_VISITS"의 4935 행보다 더 많은 행을 가졌습니다.
왼쪽 외부 결합 이해
왼쪽 외부 결합 기능은 다음과 같이 기능합니다
왼쪽 테이블에서 모든 행이 포함됩니다
각 왼쪽 테이블 행의 경우 조인 조건에 따라 오른쪽 테이블의 일치 행을 검색합니다.
일치가 발견되면 해당 오른쪽 테이블 행이 포함됩니다.
일치가 없으면 오른쪽 테이블의 열에 대해 NULL 값이 반환됩니다.
여분의 행이 나타나는 이유
여분의 행은 왼쪽 테이블 행을 복제하여 생성되지 않고 오른쪽 테이블의 구조에 의해 생성됩니다. 문제는 오른쪽 테이블 ( "data.dim_member")의 행을 일치시킬 때 발생합니다 ( "sport.susp_visits").
예를 들어 "SPESS.SUSP_VISITS"의 "memid"가 "data.dim_member"의 여러 "멤버십"값에 해당하는 경우, 결합은 단일 왼쪽 테이블 행에 대해 여러 출력 행을 생성하므로 전체 행이 증가합니다. 카운트. <.>
솔루션
왼쪽 외부 조인 에서이 행 인플레이션을 피하려면 :
-
선택 제한 : 왼쪽 테이블에서 열만 선택하십시오. 이렇게하면 출력 행 카운트가 왼쪽 테이블의 행 카운트를 초과하지 않음을 보장합니다.
내부 조인 사용 :
두 테이블 사이에 일치하는 행만 필요하면 내부 조인이 더 적절합니다. 이것은 오른쪽의 여러 경기로 인한 여분의 행을 제거합니다. - .
위 내용은 내 LEFT OUTER JOIN이 왼쪽 테이블에 존재하는 것보다 더 많은 행을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!