巢狀 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
過濾掉沒有符合 city
的 address
記錄。若要修正此問題,請將 INNER JOIN
替換為 LEFT OUTER JOIN
。
最佳實務:
雖然不是嚴格強制的,但通常建議將 INNER JOIN
放在 OUTER JOIN
之前。 這提高了可讀性並闡明了查詢的基本篩選條件。 此外,RIGHT OUTER JOIN
通常不太受歡迎,通常可以使用 LEFT OUTER JOIN
重寫,以獲得更好的清晰度和可維護性。
以上是OUTER JOIN 之後的 INNER JOIN 會抵銷 OUTER JOIN 的效果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!