解决LEFT OUTER JOIN查询结果不符的问题
在SQL中,LEFT OUTER JOIN操作旨在即使右表中不存在对应数据,也能保留左表中的数据。然而,当LEFT OUTER JOIN没有产生预期结果时,可能会令人困惑。
假设您需要使用LEFT OUTER JOIN从三个表中检索数据。您希望获取Salesrep表中的信息,即使Prescriber和Prescriptions表中不存在匹配记录。当在WHERE子句中使用日期参数执行此查询时,您会遇到一个意外的结果:没有返回与任何数据无关的销售代表的行。
为了解决这个问题,关键在于将Prescriptions.filldate的约束条件从WHERE子句移动到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 < '10-01-12'</code>
最初,当日期参数位于WHERE子句中时,Prescriptions.filldate中具有NULL值的记录被错误地过滤掉了。通过将它们包含在ON条件中,即使没有相关的处方详细信息,销售代表仍将包含在结果集中,并适当地显示NULL值。
现在,执行查询时,您将成功获得Salesrep表信息,而不管Prescriber和Prescriptions表中的对应数据如何。
以上是为什么使用日期过滤器时我的 LEFT OUTER JOIN 无法返回预期结果?的详细内容。更多信息请关注PHP中文网其他相关文章!