ホームページ >データベース >mysql チュートリアル >WHERE 句は SQL の LEFT JOIN の動作にどのような影響を与えますか?

WHERE 句は SQL の LEFT JOIN の動作にどのような影響を与えますか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-03 20:58:43710ブラウズ

How Does a WHERE Clause Affect a LEFT JOIN's Behavior in SQL?

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'

このクエリでは、tableTwo と tableThree の間の左結合は、次の理由により効果的に内部結合に変換されます。 WHERE 句の条件、c.foobar = 'somethingelse'。これは、WHERE 句で左結合の右側から NULL 以外の値 (ここでは「somethingelse」) を指定すると、対応する列が NULL である行がすべて削除され、内部結合動作が発生するためです。

したがって、クエリは、c.foobar の非 NULL 値を持つ tableThree 内の一致する行を持つ tableOne と tableTwo からの行のみを返します。望ましい左結合動作を維持するには、次の解決策を検討してください。

1. WHERE 句に NULL を含める:

条件 c.foobar = 'somethingelse' を AND (c.foobar = 'somethingelse' OR c.foobar IS NULL) に置き換えて、foobar が次のいずれかである行を含めます。他のもの' または NULL。

2.条件を結合述語に移動します:

c.foobar = 'somethingelse' 条件を WHERE 句から結合述語に移動します:

LEFT JOIN tableThree AS c ON b.pk = c.fk AND c.foobar = 'somethingelse'

これを行うと、クエリは保持されます。 c.foobar.

の値に基づいて行をフィルタリングしながら、左結合の動作を行います。

以上がWHERE 句は SQL の LEFT JOIN の動作にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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