首页 >数据库 >mysql教程 >为什么我的 LEFT OUTER JOIN 不能与 WHERE 子句中的日期过滤器一起使用?

为什么我的 LEFT OUTER JOIN 不能与 WHERE 子句中的日期过滤器一起使用?

Patricia Arquette
Patricia Arquette原创
2025-01-17 14:27:10566浏览

Why Doesn't My LEFT OUTER JOIN Work with Date Filters in the WHERE Clause?

使用日期过滤调试失败的 LEFT OUTER JOIN

常见的 SQL 查询挑战涉及将 LEFT OUTER JOIN 与日期过滤器一起使用。 我们期望即使右表(SalesrepPrescriber)中没有匹配的数据,也会返回左表(例如 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn