날짜 필터를 사용한 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
절의 날짜 제약 조건을 ON
과 prescriber
사이에 있는 LEFT OUTER JOIN의 prescriptions
절로 이동하는 것입니다. 이렇게 하면 날짜 필터링이 이 두 테이블 간의 조인에만 영향을 미치면서 salesrep
.
수정된 조인은 다음과 같습니다.
<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
의 행이 결과에 포함됩니다. 이러한 행에는 NULL
및 prescriber
열에 대한 prescriptions
값만 있습니다. 이는 LEFT OUTER JOIN의 원하는 동작을 정확하게 반영합니다.
위 내용은 WHERE 절에 날짜 매개변수를 추가할 때 왼쪽 외부 조인이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!