使用日期過濾調試失敗的 LEFT OUTER JOIN
常見的 SQL 查詢挑戰涉及將 LEFT OUTER JOIN
與日期過濾器一起使用。 我們期望即使右表(Salesrep
和 Prescriber
)中沒有匹配的數據,也會傳回左表(例如 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中文網其他相關文章!