ホームページ >データベース >mysql チュートリアル >左結合結果から行が欠落しているのはなぜですか?
左結合の不一致: 行が省略されました
このクエリでは、テーブル #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 サイトの他の関連記事を参照してください。