ホームページ >データベース >mysql チュートリアル >左結合結果から行が欠落しているのはなぜですか?

左結合結果から行が欠落しているのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-04 09:33:35368ブラウズ

Why are Rows Missing from my Left Join Result?

左結合の不一致: 行が省略されました

このクエリでは、テーブル #appSteps と #appProgress の間の LEFT JOIN が誤動作しているため、結果から予期される行を除外するset.

問題のクエリ:

select p.appId, s.stepId, s.section, p.start
from #appSteps s with (nolock)
left join #appProgress p on s.stepId = p.stepId
where s.section is not null
and p.appId = 101

期待される結果:

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000
101 10 Section 3 NULL

実際結果:

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000

解決策:

WHERE 句に右側のテーブル (#appProgress) を含めると、誤った動作が発生します。この条件を LEFT JOIN の ON 句に移動すると、目的の結果が得られます。

Select    P.appId, S.stepId, S.section, P.start
From      #appSteps    S   With (NoLock)
Left Join #appProgress P   On  S.stepId = P.stepId 
                           And P.appId = 101
Where     S.section Is Not Null

LEFT JOIN では、WHERE 句が結合の後に実行されます。これは、行が右からであることを意味します。 WHERE 句の条件を満たさないハンド テーブルは結果セットから除外されます。 WHERE 句に右側のテーブルを含めると、効果的にテーブルが INNER JOIN に変換され、予期される結果が除外されます。

以上が左結合結果から行が欠落しているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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