首頁 >資料庫 >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