首頁 > 資料庫 > mysql教程 > WHERE 子句如何影響 SQL 中 LEFT JOIN 的行為?

WHERE 子句如何影響 SQL 中 LEFT JOIN 的行為?

Barbara Streisand
發布: 2025-01-03 20:58:43
原創
703 人瀏覽過

How Does a WHERE Clause Affect a LEFT JOIN's Behavior in SQL?

WHERE 子句中左聯接的行為

在SQL 中,左聯接旨在包含左表中的所有行,即使存在右表中沒有符合的行。但是,某些條件可以改變此預設行為。

考慮以下查詢:

SELECT
a.foo,
b.bar,
c.foobar
FROM tableOne AS a
INNER JOIN tableTwo AS b ON a.pk = b.fk
LEFT JOIN tableThree AS c ON b.pk = c.fk
WHERE a.foo = 'something'
AND c.foobar = 'somethingelse'
登入後複製

在此查詢中,tableTwo 和tableThree 之間的左聯實際上被轉換為內聯接,因為WHERE 子句中的條件c.foobar = 'somethingelse'。這是因為在 WHERE 子句中從左聯接的右側指定非 NULL 值(此處為「somethingelse」)會消除任何對應列為 NULL 的行,從而導致內聯行為。

因此,查詢僅傳回 tableOne 和 tableTwo 中與 tableThree 中具有非 NULL 值 c.foobar 的行相符的行。要保持所需的左連接行為,請考慮以下解決方案:

1.在WHERE 子句中包含NULL:

將條件c.foobar = ' somethingelse' 替換為AND (c.foobar = 'somethingelse' OR c.foobar IS NULL) 以包含foobar 為 '的行其他'或 NULL。

2.將條件移到連接謂詞:

將c.foobar = 'somethingelse' 條件從WHERE 子句移到連接謂詞:

LEFT JOIN tableThree AS c ON b.pk = c.fk AND c.foobar = 'somethingelse'
登入後複製

藉由這樣做,查詢保留左連接行為,同時仍根據c.foobar 的值過濾掉行。

以上是WHERE 子句如何影響 SQL 中 LEFT JOIN 的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板