SQL で LEFT JOIN を使用する場合、その固有の特性と潜在的な落とし穴を認識することが重要です。この質問は、LEFT JOIN クエリが予期しない結果を返し、基礎となるメカニズムを詳しく調べて問題を解決するよう促す例を示しています。
LEFT JOIN 操作は、左側のテーブルからすべての行を取得します (この場合、 #appSteps) は、正しいテーブル (#appProgress) と一致するかどうかには関係ありません。右側のテーブル内の一致しない行には NULL 値が割り当てられます。ただし、WHERE 句 (p.appId = 101) に適切なテーブルを含めると、基本的にクエリを INNER JOIN に変換します。
解決策:
問題を修正するには、正しいテーブル (p.appId = 101) をフィルターする述語を、 WHERE 句を LEFT JOIN ステートメントの ON 条件に追加します。これにより、結合を実行する前に結合で適切なテーブルを強制的にフィルターし、一致する行のみが含まれるようにします。
調整された SQL ステートメントは次のとおりです。
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 機能を正しく利用すると、行を誤って除外することなく、#appSteps の null 以外のすべての行と #appProgress の一致する行を含む期待どおりの結果が得られます。 WHERE 句に述語が追加されているためです。
以上がSQL の LEFT JOIN が予期しない結果を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。