집 >데이터 베이스 >MySQL 튜토리얼 >T-SQL LEFT JOIN이 예상보다 적은 수의 행을 반환하는 이유는 무엇입니까?
T-SQL Left 조인이 예상한 결과를 생성하지 않는 이유는 무엇입니까?
제공된 SQL 쿼리에서 사이에 LEFT JOIN을 사용했음에도 불구하고 테이블 2개(#appSteps 및 #appProgress), 예상되는 3개 행 대신 2개 행만 반환됩니다. 예상치 못한 동작의 원인을 파악하기 위해 쿼리와 해당 구성 요소를 분석해 보겠습니다.
LEFT JOIN 작업의 목표는 왼쪽 테이블(#appSteps)에서 해당 일치 항목이 없더라도 왼쪽 테이블의 모든 행을 반환하는 것입니다. 오른쪽 테이블(#appProgress). 그러나 쿼리에는 #appSteps:
where s.section is not null
에서 NULL 행을 필터링하는 WHERE 절의 조건이 포함되어 있습니다. 이 조건은 실수로 #appSteps.section이 NULL이 아닌 행으로 결과 집합을 제한합니다. LEFT JOIN을 INNER JOIN으로 변환합니다. #appSteps.section에서 NULL 값이 있는 행이 제외되어 예상되는 세 번째 행이 없습니다.
이 문제를 해결하려면 조건을 LEFT JOIN의 ON 조건으로 이동해야 합니다.
Left Join #appProgress P On S.stepId = P.stepId And P.appId = 101
ON 절에 조건을 지정하면 조인 기준의 일부가 되어 #appSteps에서 일치하는 행만 가져옵니다. #appProgress. 결과적으로 LEFT JOIN은 #appProgress와 일치하는지 여부에 관계없이 NULL 값이 있는 행을 포함하여 #appSteps에서 모든 행을 검색합니다.
이 접근 방식을 사용하면 쿼리는 원래와 같이 원하는 세 개의 행을 반환합니다. 의도했습니다.
위 내용은 T-SQL LEFT JOIN이 예상보다 적은 수의 행을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!