날짜 필터링을 사용하여 실패한 LEFT OUTER JOIN 디버깅
일반적인 SQL 쿼리 문제는 날짜 필터와 함께 LEFT OUTER JOIN
을 사용하는 것입니다. 오른쪽 테이블(Salesrep
및 Prescriber
)에 일치하는 데이터가 없더라도 왼쪽 테이블(예: Prescriptions
)의 데이터가 반환될 것으로 예상됩니다. 그러나 WHERE
절에 날짜 필터를 추가하면 예기치 않게 왼쪽 테이블의 레코드가 필터링될 수 있습니다.
문제 이해:
문제는 기간 조건의 위치에서 발생합니다. WHERE
절에 해당 항목을 배치하면 조인 이후 결과가 잘못 필터링되어 지정된 날짜 범위 내에서 일치하는 항목이 없는 왼쪽 테이블의 행이 효과적으로 제거됩니다.
올바른 접근 방식:
LEFT OUTER JOIN
의 무결성을 유지하려면 날짜 범위 기준을 조인 자체의 ON
절에 통합해야 합니다. 이렇게 하면 조인 중 필터링이 발생하여 날짜 범위 내의 일치 처방에 관계없이 왼쪽 테이블의 모든 레코드가 보존됩니다.
수정된 쿼리:
<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-30-12'</code>
날짜 필터를 ON
절로 재배치하면 쿼리는 지정된 기간 내에 처방전이 없는 영업 담당자를 포함하여 Salesrep
테이블의 모든 데이터를 정확하게 반환합니다. 이는 LEFT OUTER JOIN
.
위 내용은 내 LEFT OUTER JOIN이 WHERE 절의 날짜 필터와 함께 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!