使用日期过滤器对 LEFT OUTER JOIN 进行故障排除
此 SQL 查询在三个表中使用 LEFT OUTER JOIN:salesrep
、prescriber
和 prescriptions
。目标是检索 salesrep
中的所有数据,即使 prescriber
或 prescriptions
中没有匹配的条目。 当日期参数添加到 WHERE
子句时,就会出现问题。 该查询不会按预期返回所有 salesrep
数据,而是仅返回所有三个表中都存在匹配项的结果。
该问题源于对 prescriptions.filldate
子句中的 WHERE
进行过滤。 对于那些缺少相应 salesrep
数据的 prescriptions
条目,此条件有效地将 LEFT OUTER JOIN 转换为 INNER JOIN,因为 WHERE
子句消除了 NULL
.prescriptions.filldate
具有
解决方案:将日期过滤器重新定位到 JOIN 条件
正确的方法是将日期约束从 WHERE
子句移至 ON
和 prescriber
之间的 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
中的行也将包含在结果中。 这些行将仅具有 NULL
和 prescriber
列的 prescriptions
值。 这准确地反映了 LEFT OUTER JOIN 所需的行为。
以上是为什么在 WHERE 子句中添加日期参数时我的左外连接失败?的详细内容。更多信息请关注PHP中文网其他相关文章!