ホームページ >データベース >mysql チュートリアル >OUTER JOIN の後の INNER JOIN は OUTER JOIN の効果を無効にしますか?

OUTER JOIN の後の INNER JOIN は OUTER JOIN の効果を無効にしますか?

DDD
DDDオリジナル
2025-01-09 10:41:41488ブラウズ

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>

2 番目の ON 句には、非 NULL address.city_id が必要です。 これにより、LEFT OUTER JOIN が無効になり、person を介して一致する city のない address レコードが除外されます。これを修正するには、INNER JOINLEFT OUTER JOIN に置き換えます。

ベストプラクティス:

厳密には必須ではありませんが、一般的には INNER JOIN の前に OUTER JOIN を配置することをお勧めします。 これにより、可読性が向上し、クエリの重要なフィルタリング条件が明確になります。 さらに、RIGHT OUTER JOIN はあまり好まれないことが多く、通常は明確さと保守性を高めるために LEFT OUTER JOIN を使用して書き直すことができます。

以上がOUTER JOIN の後の INNER JOIN は OUTER JOIN の効果を無効にしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。