ホームページ >データベース >mysql チュートリアル >LEFT OUTER JOIN が左側のテーブルに存在する行よりも多くの行を返すのはなぜですか?

LEFT OUTER JOIN が左側のテーブルに存在する行よりも多くの行を返すのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-25 01:22:09994ブラウズ

Why Does My LEFT OUTER JOIN Return More Rows Than Exist in the Left Table?

LEFT OUTER JOIN 予期しない動作: 左のテーブルより多くの行があります

LEFT OUTER JOIN に関するよくある誤解は、結果セットには常に左側のテーブルと同じかそれより少ない行が含まれるということです。 ただし、これは常に真実であるとは限りません。 特定の条件下では、行数が左側のテーブルの行数を超える可能性があります。

この問題は、「SUSP.Susp_Visits」(左側のテーブル) と「DATA.Dim_Member」(右側のテーブル) の間で LEFT OUTER JOIN を使用するクエリで発生しました。結合結果には、「SUSP.Susp_Visits」の 4935 行よりも多くの行が含まれていました。

LEFT OUTER JOIN について

LEFT OUTER JOIN は次のように機能します:

  • 左のテーブルのすべての行が含まれます。
  • 左側のテーブルの各行について、結合条件に基づいて右側のテーブルで一致する行を検索します。
  • 一致が見つかった場合、対応する右側のテーブル行が含まれます。
  • 一致するものが見つからない場合は、正しいテーブルの列に NULL 値が返されます。

余分な行が表示される理由

追加の行は、左側のテーブルの行を複製することによって作成されるのではなく、右側のテーブルの構造によって作成されます。 この問題は、右側のテーブル ("DATA.Dim_Member") の 複数 行が、左側のテーブル ("SUSP.Susp_Visits") の 単一 行と一致する場合に発生します。

たとえば、「SUSP.Susp_Visits」の「MemID」が「DATA.Dim_Member」の複数の「MembershipNum」値に対応する場合、JOIN はその左側の単一行に対して複数の出力行を生成し、全体の行が増加します。数えます。

ソリューション

LEFT OUTER JOIN でのこの行のインフレを回避するには:

  • 選択を制限: 左側のテーブルの列のみを選択します。 これにより、出力行数が左側のテーブルの行数を超えないことが保証されます。
  • 内部結合を使用する: 両方のテーブル間に一致が存在する行のみが必要な場合は、内部結合の方が適切です。 これにより、右側の複数の一致によって生じる余分な行が削除されます。

以上がLEFT OUTER JOIN が左側のテーブルに存在する行よりも多くの行を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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