ホームページ >データベース >mysql チュートリアル >WHERE 句に日付パラメータを追加すると左外部結合が失敗するのはなぜですか?

WHERE 句に日付パラメータを追加すると左外部結合が失敗するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-17 14:16:10609ブラウズ

Why Does My Left Outer Join Fail When Adding Date Parameters to the WHERE Clause?

日付フィルターを使用した LEFT OUTER JOIN のトラブルシューティング

この SQL クエリは、3 つのテーブル salesrepprescriberprescriptions にわたって LEFT OUTER JOIN を使用します。目標は、salesrep または prescriber に一致するエントリがない場合でも、prescriptions からすべてのデータを取得することです。 問題は、日付パラメータが WHERE 句に追加されたときに発生します。 クエリは、期待どおりすべての salesrep データを返すのではなく、3 つのテーブルすべてに一致が存在する結果のみを返します。

この問題は、prescriptions.filldate 句内の WHERE のフィルタリングに起因します。 この条件は、salesrep 句が prescriptions.WHERENULL 値を持つ行を削除するため、対応する prescriptions.filldate データが欠落している

エントリの LEFT OUTER JOIN を INNER JOIN に効果的に変換します。

解決策: 日付フィルターを JOIN 条件に再配置します

正しいアプローチは、日付制約を WHERE 句から ONprescriber の間の LEFT OUTER JOIN の prescriptions 句に移動することです。 これにより、salesrep.

に関する LEFT OUTER JOIN の意図された動作を維持しながら、日付フィルタリングがこれら 2 つのテーブル間の結合にのみ影響することが保証されます。

修正された結合は次のようになります:

<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 の行が結果に含まれます。 これらの行には、NULLprescriber の列の prescriptions 値が含まれるだけです。 これは、LEFT OUTER JOIN の望ましい動作を正確に反映しています。

以上がWHERE 句に日付パラメータを追加すると左外部結合が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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