異なる結果を返すグループ クエリがあります。最初は間違った結果を返し、次に正しい結果を返します。
select
c.customer_name, c.customer_address, invoice_no,
sum(nvl(invoiced_amount,0)) invoice_amount,
sum(nvl(received_amount,0)) received_amount,
sum(nvl(returned_amount,0)) returned_amount
from sales_detail d, sales s, customer c
where d.inquiry_id = s.inquiry_id
and s.customer_id = c.customer_id
and s.sale_date between '01-jan-2012' and '31-dec-2012'
group by c.customer_name, c.customer_address, invoice_no
複数の行を返し、正しい行数を提供しますが、一部の請求書の値を 2 倍にします。通常、最初に実行したときに発生し、後で正しい結果が得られます。
次に例を示します。
データベースの実際のデータ
invoice_no | invoiced_amount | received_amount | returned_amount
000010020 | 500 | 230 | 0
クエリによって返される結果
invoice_no | invoiced_amount | received_amount | returned_amount
000010020 | 1000 | 460 | 0
クエリは数日前にこのように動作し始めましたが、それ以外は完全に機能していました。
追加情報
- sales_detail テーブルには 5 つのインデックスがあります
- 顧客はビューであり、物理テーブルは同じ名前の別のスキーマにあります
環境情報
- OS: Windows 2003 サーバー
- データベース: Oracle 9.0.1.1 エンタープライズ