ホームページ >データベース >mysql チュートリアル >T-SQL LEFT JOIN が 3 行ではなく 2 行しか返さないのはなぜですか?

T-SQL LEFT JOIN が 3 行ではなく 2 行しか返さないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-06 00:55:39960ブラウズ

Why is my T-SQL LEFT JOIN only returning two rows instead of three?

左結合で予期した結果が得られない

提供された T-SQL コードは、2 つのテーブル #appSteps と #appProgress の間で左結合を実行することを目的としていますが、結果セットは予想される行ではなく 2 行しか含まれていません3.

問題

この問題は、右側のテーブル (#appProgress) が WHERE 句に含まれているために発生します:

where s.section is not null
and p.appId = 101

説明

LEFT JOIN の目的は次のとおりです。右側のテーブルに一致するレコードがない行を含む、左側のテーブルのすべての行を返します。ただし、WHERE 句に右側のテーブルを含めることで、クエリは効果的に INNER JOIN のように動作し、右側のテーブルのレコードに一致しない行を左側のテーブルから除外します。

解決策

目的の結果セットを取得するには、右側のテーブルのフィルター条件を LEFT の ON 句に移動します。 JOIN:

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

ON 句に条件を指定すると、両方のテーブルの一致する行が最初に結合され、次に WHERE 句が適用されて結果がさらにフィルタリングされ、null 以外の行のみが確実にフィルタリングされます。セクションの値が返されます。

以上がT-SQL LEFT JOIN が 3 行ではなく 2 行しか返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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