ホームページ >データベース >mysql チュートリアル >T-SQL LEFT JOIN が 3 行ではなく 2 行しか返さないのはなぜですか?
提供された 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 サイトの他の関連記事を参照してください。