使用日期過濾器對 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中文網其他相關文章!