ホームページ >データベース >mysql チュートリアル >日付フィルターを使用すると、LEFT OUTER JOIN が予期した結果を返さないのはなぜですか?

日付フィルターを使用すると、LEFT OUTER JOIN が予期した結果を返さないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-17 14:13:09895ブラウズ

Why Does My LEFT OUTER JOIN Fail to Return Expected Results When Using Date Filters?

一貫性のない LEFT OUTER JOIN クエリ結果の問題の解決

SQL の LEFT OUTER JOIN 操作は、対応するデータが右側のテーブルに存在しない場合でも、左側のテーブルにデータを保持するように設計されています。ただし、LEFT OUTER JOIN が期待どおりの結果を生成しない場合、混乱を招く可能性があります。

LEFT OUTER JOIN を使用して 3 つのテーブルからデータを取得する必要があるとします。 Prescriber テーブルと Prescriptions テーブルに一致するレコードが存在しない場合でも、Salesrep テーブルから情報を取得したいとします。 WHERE 句に日付パラメータを指定してこのクエリを実行すると、予期しない結果が発生します。データに関連付けられていない営業担当者に対しては行が返されません。

この問題を解決するには、Prescriptions.filldate の制約を WHERE 句から JOIN の ON 条件に移動することが重要です。変更されたクエリは次のようになります:

<code class="language-sql">LEFT OUTER JOIN prescriptions ON prescriber.dea_no = prescriptions.dea_no AND
                             prescriptions.filldate >= '09-01-12'
                             AND prescriptions.filldate < '10-01-12'</code>

当初、日付パラメータが WHERE 句にある場合、Prescriptions.filldate に NULL 値を持つレコードが誤って除外されていました。 ON 条件に含めることで、処方箋の詳細が関連付けられていない場合でも、営業担当者が結果セットに含まれ、NULL 値が適切に表示されます。

クエリを実行すると、Prescriber テーブルと Prescriptions テーブルの対応するデータに関係なく、Salesrep テーブルの情報を正常に取得できるようになります。

以上が日付フィルターを使用すると、LEFT OUTER JOIN が予期した結果を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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