INNER JOIN と OUTER JOIN の併用
複数テーブルの結合クエリを実行する場合、INNER JOIN と OUTER JOIN の順序が重要です。多くの人は、OUTER JOIN の後に INNER JOIN を使用すると、OUTER JOIN の効果が打ち消されると誤解していますが、これは完全に真実ではありません。
INNER JOIN の役割
INNER JOIN は、結合テーブル内に一致する行がない行を結果セットから削除します。一致する列 (主キーと外部キーのペアなど) に NULL 値がない場合でも、これらの不一致の行は削除されます。
潜在的な問題
OUTER JOIN の効果は、INNER JOIN の ON 句が OUTER JOIN 内で除外される必要がある行を指定している場合にのみ、後続の INNER JOIN によって相殺されます。たとえば、次のクエリでは:
SELECT * FROM person LEFT JOIN address ON person.address_id = address.id INNER JOIN city ON address.city_id = city.id
2 番目の ON 句では、address.city_id が NULL ではないことが必要です。これにより、LEFT JOIN の効果が無効になる可能性があります。この問題を解決するには、2 番目の JOIN を LEFT OUTER JOIN に変更する必要があります。
ベストプラクティス
結果は変わりませんが、一般的にはクエリ内で OUTER JOIN の前に INNER JOIN を置くことをお勧めします。これにより、可読性が向上し、オプションの制限が適用される前に必要な制限が確実に適用されます。また、可能な限り RIGHT OUTER JOIN の使用を避け、代わりに LEFT OUTER JOIN を使用してください。これにより、明確さと実装が容易になります。
以上がINNER JOIN は以前の OUTER JOIN の結果をオーバーライドしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。