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