> 데이터 베이스 > MySQL 튜토리얼 > WHERE 절에 날짜 매개변수를 추가할 때 왼쪽 외부 조인이 실패하는 이유는 무엇입니까?

WHERE 절에 날짜 매개변수를 추가할 때 왼쪽 외부 조인이 실패하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-17 14:16:10
원래의
606명이 탐색했습니다.

Why Does My Left Outer Join Fail When Adding Date Parameters to the WHERE Clause?

날짜 필터를 사용한 LEFT OUTER JOIN 문제 해결

이 SQL 쿼리는 salesrep, prescriber, prescriptions 세 테이블에서 LEFT OUTER JOIN을 사용합니다. 목표는 salesrep 또는 prescriber에 일치하는 항목이 없더라도 prescriptions에서 모든 데이터를 검색하는 것입니다. WHERE 절에 날짜 매개변수를 추가하면 문제가 발생합니다. 쿼리는 예상대로 모든 salesrep 데이터를 반환하는 대신 세 테이블 모두에 일치하는 결과만 반환합니다.

이 문제는 prescriptions.filldate 절 내에서 WHERE을 필터링하는 데서 발생합니다. salesrep 절이 prescriptions에 대해 WHERE 값이 있는 행을 제거하므로 이 조건은 해당 NULL 데이터가 없는 prescriptions.filldate 항목에 대해 LEFT OUTER JOIN을 INNER JOIN으로 효과적으로 변환합니다.

해결책: 날짜 필터를 JOIN 조건으로 재배치

올바른 접근 방식은 WHERE 절의 날짜 제약 조건을 ONprescriber 사이에 있는 LEFT OUTER JOIN의 prescriptions 절로 이동하는 것입니다. 이렇게 하면 날짜 필터링이 이 두 테이블 간의 조인에만 영향을 미치면서 salesrep.

과 관련하여 LEFT OUTER JOIN의 의도된 동작을 계속 유지합니다.

수정된 조인은 다음과 같습니다.

<code class="language-sql">LEFT OUTER JOIN prescriptions ON prescriber.dea_no = prescriptions.dea_no
                             AND prescriptions.filldate >= '09-01-12'
                             AND prescriptions.filldate <= '09-17-12'</code>
로그인 후 복사

ON 절 내에 날짜 제한을 배치하면 날짜 기준을 충족하는 salesrep에 일치하는 항목이 없더라도 prescriptions의 행이 결과에 포함됩니다. 이러한 행에는 NULLprescriber 열에 대한 prescriptions 값만 있습니다. 이는 LEFT OUTER JOIN의 원하는 동작을 정확하게 반영합니다.

위 내용은 WHERE 절에 날짜 매개변수를 추가할 때 왼쪽 외부 조인이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿