ホームページ > データベース > mysql チュートリアル > LEFT OUTER JOIN パズル: 左テーブルのレコードよりも多くの結果が得られるのはなぜですか?

LEFT OUTER JOIN パズル: 左テーブルのレコードよりも多くの結果が得られるのはなぜですか?

DDD
リリース: 2025-01-25 01:26:09
オリジナル
509 人が閲覧しました

LEFT OUTER JOIN Puzzle: Why More Results Than Left Table Records?

LEFT OUTER JOIN 問題: レコード数が左側のテーブルを超えていますか?

LEFT OUTER JOIN は常に左側のテーブルのすべてのレコードを返すことが一般的に受け入れられていますが、あるユーザーは、クエリが予想よりも多くの結果を返したときに混乱しました。

問題の 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
ログイン後にコピー

真実を明らかにしましょう:

誤解は、LEFT OUTER JOIN が左側のテーブル内の一致しない行に対してのみ NULL 値を返すという仮定です。実際、右側のテーブルの複数の行が左側のテーブルの行と一致する場合でも、一致するすべての行が返されます。

例:

次の形式を考えてみましょう:

**Susp_Visits** **Dim_Member**
MemID: 1 MembershipNum: 1
MemID: 1 MembershipNum: 2
MemID: 2 MembershipNum: NULL

MemID に基づく LEFT OUTER JOIN は次の結果を生成します:

**SuspReason****SiteID****MembershipNum**
111
112
22NULL

ご覧のとおり、Susp_Visits.SuspReason が 1 の行は、Dim_Member の 2 つの行と一致するため、重複しています。

代替:

左側のテーブルから一意の行のみを取得することが目的の結果である場合、LEFT OUTER JOIN は必要ありません。左側のテーブルから簡単な SELECT を実行するだけです:

SELECT     
    SuspReason, SiteID
FROM
    SUSP.Susp_Visits
ログイン後にコピー

以上がLEFT OUTER JOIN パズル: 左テーブルのレコードよりも多くの結果が得られるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート