ホームページ >データベース >mysql チュートリアル >日付でフィルターすると、左外部結合ですべての営業担当者が返されないのはなぜですか?

日付でフィルターすると、左外部結合ですべての営業担当者が返されないのはなぜですか?

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

Why Doesn't My Left Outer Join Return All Sales Representatives When I Filter by Date?

SQL 左外部結合の日付フィルタリングの問題を解決します

SQL クエリで、左外部結合は予期した結果を返しませんでした。具体的には、WHERE 句に日付パラメータを含めると、右側のテーブルに一致するデータがない営業担当者は表示されません。

この問題を解決するには、prescriptions テーブルの日付制約を ON 句内に保持するのではなく、結合の WHERE 条件に移動する必要があります。

<code class="language-sql">SELECT  salesrep.salesrepid as SalesRepID,
        salesrep.fname as SalesrepFName,
        salesrep.lname as SalesRepLName,
        salesrep.fname+' '+salesrep.lname as SalesRepFullName,
        prescriber.dea_no as PDeaNo,
        prescriber.lname+', '+prescriber.fname as DocName,
        CONVERT(VARCHAR(8), prescriptions.filldate, 1) as FillDate,
        prescriptions.drugname as DrugName,
        prescriptions.daysupply as Supply,
        prescriptions.qtydisp as QtyDisp,
        prescriptions.rx_no as Refill,
        prescriptions.copay as Sample,
        ROUND(prescriptions.AgreedToPay-(prescriptions.AgreedToPay*.07),2) as AgreedToPay,
        prescriptions.carrierid as CarrierID
FROM salesrep
  LEFT OUTER JOIN prescriber on salesrep.salesrepid = prescriber.salesrepid
  LEFT OUTER JOIN prescriptions ON prescriber.dea_no = prescriptions.dea_no
                             AND prescriptions.filldate >= '09-01-12'
                             AND prescriptions.filldate <= '09-17-12'
ORDER BY prescriptions.filldate</code>

制約を ON 条件に移動することで、prescriptions テーブルに一致するレコードが存在するかどうかに関係なく、左外部結合がすべての営業担当者に対して結果を正しく返すようにすることができます。

以上が日付でフィルターすると、左外部結合ですべての営業担当者が返されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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