ホームページ > データベース > mysql チュートリアル > SQL の LEFT JOIN が予期しない結果を返すのはなぜですか?

SQL の LEFT JOIN が予期しない結果を返すのはなぜですか?

Patricia Arquette
リリース: 2024-12-31 14:52:14
オリジナル
892 人が閲覧しました

Why is My LEFT JOIN in SQL Returning Unexpected Results?

LEFT JOIN を理解する: SQL クエリが予期した結果を返さない理由

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート