ホームページ >データベース >mysql チュートリアル >SQLの左外結合が左のテーブルよりも多くの行を返すのはなぜですか?
SQL LEFT OUTER JOIN について: なぜ左側のテーブルより行が多いのか?
LEFT OUTER JOIN
についてよくある誤解は、左のテーブルから常に正確な行数を返すということです。 左側のテーブルのすべての行が含まれますが、右側のテーブルに重複した一致がある場合、実際にはさらに行が生成される可能性があります。
これを例で説明してみましょう:
次のクエリについて考えてみましょう:
<code class="language-sql">SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID FROM SUSP.Susp_Visits LEFT OUTER JOIN DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum</code>
このクエリは、Susp_Visits
(左側のテーブル) と Dim_Member
(右側のテーブル) を結合することを目的としています。 直観的には、最大 4935 行が予想されるかもしれません (これが Susp_Visits
の数であると仮定します)。ただし、実際の結果はさらに大きくなる可能性があります。
その理由は、LEFT OUTER JOIN
が左テーブルと右テーブル間のすべて の一致に対して結果セットに行を作成するためです。 Susp_Visits
内の 1 つの行が Dim_Member
内の複数の行と一致する場合、その行は出力で複製され、当初の予想よりも多くの行が生成されます。
したがって、LEFT OUTER JOIN
の後の行数が予想よりも大きい場合は、結合条件に基づいて、左側のテーブルの少なくとも 1 つの行が右側のテーブルに対応する複数の行があることを示します。
これに対処するには:
SELECT
ステートメントを使用するだけです。DISTINCT
文に SELECT
句を追加します: SELECT DISTINCT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID ...
これにより、結果セットから重複行が削除されます。これは LEFT OUTER JOIN
の動作を明確にし、結果セットが左側のテーブルの行数を超える状況を処理するための解決策を提供します。
以上がSQLの左外結合が左のテーブルよりも多くの行を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。