日付フィルタリングを使用した失敗した LEFT OUTER JOIN のデバッグ
一般的な SQL クエリの課題には、日付フィルターで LEFT OUTER JOIN
を使用することが含まれます。 右側のテーブル (Salesrep
と Prescriber
) に一致するデータがない場合でも、左側のテーブル (例: Prescriptions
) のデータが返されることが期待されます。 ただし、WHERE
句に日付フィルターを追加すると、左側のテーブルからレコードが予期せず除外される可能性があります。
問題の理解:
問題は、日付範囲条件の場所から発生します。 これらを WHERE
句に配置すると、結合後の結果が誤ってフィルタリングされ、指定された日付範囲内で一致するエントリが存在しない行が左側のテーブルから実質的に削除されます。
正しいアプローチ:
LEFT OUTER 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 <= '09-30-12'</code>
日付フィルターを ON
句に再配置することで、クエリは、指定された期間内の処方箋のない営業担当者を含む、Salesrep
テーブルのすべてのデータを正確に返します。 これにより、LEFT OUTER JOIN
.
以上がLEFT OUTER JOIN が WHERE 句の日付フィルターで機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。