使用日期过滤调试失败的 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中文网其他相关文章!