ホームページ >データベース >mysql チュートリアル >WHERE 句に日付パラメータを追加すると左外部結合が失敗するのはなぜですか?
日付フィルターを使用した LEFT OUTER JOIN のトラブルシューティング
この SQL クエリは、3 つのテーブル salesrep
、prescriber
、prescriptions
にわたって LEFT OUTER JOIN を使用します。目標は、salesrep
または prescriber
に一致するエントリがない場合でも、prescriptions
からすべてのデータを取得することです。 問題は、日付パラメータが WHERE
句に追加されたときに発生します。 クエリは、期待どおりすべての salesrep
データを返すのではなく、3 つのテーブルすべてに一致が存在する結果のみを返します。
この問題は、prescriptions.filldate
句内の WHERE
のフィルタリングに起因します。 この条件は、salesrep
句が prescriptions
.WHERE
の NULL
値を持つ行を削除するため、対応する prescriptions.filldate
データが欠落している
解決策: 日付フィルターを JOIN 条件に再配置します
正しいアプローチは、日付制約を WHERE
句から ON
と prescriber
の間の LEFT OUTER JOIN の prescriptions
句に移動することです。 これにより、salesrep
.
修正された結合は次のようになります:
<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-17-12'</code>
ON
句内に日付制限を設定すると、salesrep
内に日付基準を満たす一致するエントリがない場合でも、prescriptions
の行が結果に含まれます。 これらの行には、NULL
と prescriber
の列の prescriptions
値が含まれるだけです。 これは、LEFT OUTER JOIN の望ましい動作を正確に反映しています。
以上がWHERE 句に日付パラメータを追加すると左外部結合が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。