左結合と WHERE 句の特徴
データ取得操作を実行するとき、開発者は多くの場合、左結合を使用して複数のテーブルからの情報を結合します。ただし、WHERE 句を左結合と組み合わせて使用すると、左結合の動作が変わる可能性がある一般的な落とし穴が発生します。
次の SQL ステートメントを考えてみましょう。
SELECT a.foo b.bar c.foobar FROM tableOne AS a INNER JOIN tableTwo AS b ON a.pk = b.fk LEFT JOIN tableThree AS c ON b.pk = c.fk WHERE a.foo = 'something' AND c.foobar = 'somethingelse'
直感的には、このステートメントは、c.foobar のフィルター条件を指定して、tableThree と tableTwo の間の左結合を実行することを期待します。ただし、c.foobar = 'somethingelse' を含む WHERE 句の存在により、左結合の特性が誤って変更されてしまいます。
左結合の右側の値 (この場合は c.foobar) がWHERE 句に含めると、値が NULL ではない行のみが結果セットに含まれます。したがって、左結合は効果的に内部結合のように動作し、c.foobar.
の NULL 値を持つすべての行を削除します。上記の例の左結合の意図された動作を維持するには、次のいずれかを使用できます。アプローチ:
以上が左結合と WHERE 句: これらはどのように相互作用し、予期しない結果を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。