首页 >数据库 >mysql教程 >为什么在 WHERE 子句中添加日期参数时我的左外连接失败?

为什么在 WHERE 子句中添加日期参数时我的左外连接失败?

Linda Hamilton
Linda Hamilton原创
2025-01-17 14:16:10608浏览

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

使用日期过滤器对 LEFT OUTER JOIN 进行故障排除

此 SQL 查询在三个表中使用 LEFT OUTER JOIN:salesrepprescriberprescriptions。目标是检索 salesrep 中的所有数据,即使 prescriberprescriptions 中没有匹配的条目。 当日期参数添加到 WHERE 子句时,就会出现问题。 该查询不会按预期返回所有 salesrep 数据,而是仅返回所有三个表中都存在匹配项的结果。

该问题源于对 prescriptions.filldate 子句中的 WHERE 进行过滤。 对于那些缺少相应 salesrep 数据的 prescriptions 条目,此条件有效地将 LEFT OUTER JOIN 转换为 INNER JOIN,因为 WHERE 子句消除了 NULL.prescriptions.filldate 具有

值的行。

解决方案:将日期过滤器重新定位到 JOIN 条件

正确的方法是将日期约束从 WHERE 子句移至 ONprescriber 之间的 LEFT OUTER JOIN 的 prescriptions 子句。 这确保了日期过滤仅影响这两个表之间的联接,同时仍然保留 LEFT OUTER JOIN 相对于 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 中的行也将包含在结果中。 这些行将仅具有 NULLprescriber 列的 prescriptions 值。 这准确地反映了 LEFT OUTER JOIN 所需的行为。

以上是为什么在 WHERE 子句中添加日期参数时我的左外连接失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

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