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

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

DDD
DDD原創
2025-01-09 10:41:41437瀏覽

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(重新排序無關緊要):

<code class="language-sql">SELECT *
FROM person
LEFT JOIN address
  ON person.address_id = address.id
INNER JOIN email
  ON person.email_id = email.id</code>

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

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

<code class="language-sql">SELECT *
FROM person
LEFT JOIN address
  ON person.address_id = address.id
INNER JOIN city
  ON address.city_id = city.id</code>

第二個 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