ネストされた 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>
2 番目の 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 中国語 Web サイトの他の関連記事を参照してください。