データベース ウィザードの領域では、左結合を使用して複雑なデータ取得を実行するのが一般的です。ただし、場合によっては、左結合が期待どおりに動作しないことがあります。
次のクエリを想像してください:
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 条件が WHERE 句に次のように配置されている場合です。上では、左結合と思われる部分が内部結合に変化しているように見えます。結果は、a.foo と c.foobar の両方の基準が満たされる場合にのみ返されます。
なぜ変態するのでしょうか?鍵は WHERE 句にあります。左結合の右側 (ON 句の右側のテーブルを参照する右側) の値が WHERE 句で指定されている場合、すべての NULL 値が破棄され、実質的に左結合が内部結合に縮小されます。簡単に言うと、c.foobar が tableThree に存在しない場合、クエリは行を返しません。
この苦境を回避するには、2 つのオプションがあります。
AND (c.foobar = 'somethingelse' OR c.foobar IS NULL)
LEFT JOIN tableThree AS c ON b.pk = c.fk AND c.foobar = 'somethingelse'
これらのソリューションのどちらを選択するかは、特定のクエリの要件。ただし、WHERE 句が存在する場合の左結合の基本的な動作を理解することは、データ取得手法を習得するために重要です。
以上がWHERE 句で右側のテーブルの列をフィルタリングすると、左側の結合が内部結合のように動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。