首頁 > 資料庫 > mysql教程 > OUTER JOIN 之後的 INNER JOIN 會抵銷 OUTER JOIN 的效果?

OUTER JOIN 之後的 INNER JOIN 會抵銷 OUTER JOIN 的效果?

DDD
發布: 2025-01-09 10:41:41
原創
514 人瀏覽過

Does an INNER JOIN After an OUTER JOIN Negate the OUTER JOIN's Effect?

巢狀 SQL 連線:INNER JOIN 與 OUTER JOIN

INNER JOIN 後面的 OUTER JOIN 會抵消 OUTER JOIN 的效果嗎? 在多連接查詢中 INNER JOIN 是否應該始終位於 OUTER JOIN 之前?

答案是微妙的。 如果 INNER JOIN 子句要求存在因 OUTER JOIN 而可能是 ON 的列,則後續的 NULL 只會否定 OUTER JOIN。 簡單地重新排列連接並不能解決這個問題;您需要將 INNER JOIN 更改為合適的 OUTER JOIN

讓我們舉例:

範例 1(重新排序無關緊要):

SELECT *
FROM person
LEFT JOIN address
  ON person.address_id = address.id
INNER JOIN email
  ON person.email_id = email.id
登入後複製

在這裡,重新排序連線不會改變結果。

範例2(重新排序事項):

SELECT *
FROM person
LEFT JOIN address
  ON person.address_id = address.id
INNER JOIN city
  ON address.city_id = city.id
登入後複製

第二個 ON 子句需要一個非 NULL address.city_id。 這會擊敗 LEFT OUTER JOIN,透過 person 過濾掉沒有符合 cityaddress 記錄。若要修正此問題,請將 INNER JOIN 替換為 LEFT OUTER JOIN

最佳實務:

雖然不是嚴格強制的,但通常建議將 INNER JOIN 放在 OUTER JOIN 之前。 這提高了可讀性並闡明了查詢的基本篩選條件。 此外,RIGHT OUTER JOIN 通常不太受歡迎,通常可以使用 LEFT OUTER JOIN 重寫,以獲得更好的清晰度和可維護性。

以上是OUTER JOIN 之後的 INNER JOIN 會抵銷 OUTER JOIN 的效果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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