2012-12-04 89 views
0

我在更新我的一個表中的列時出現問題。我有一張名爲ORDERS的表格,我在表格中添加了一個新列,表示訂單的總成本。我通過使用計算成本的查詢來獲得總成本。現在我試圖使用該選擇查詢來填充表中的該列。這是我的:sql oracle - 更新使用選擇

update ORDERS 
set TOTAL_COST = (
select sum((p.COST*i.QUANTITY)*(1-o.DISCOUNT))+delivery(o.DELIVERY) as TOTAL_COST 
from PRODUCT p, ITEM i, ORDERS o 
where p.ID_PRODUCT = i.ID_PRODUCT and i.ID_ORDER = o.ID_ORDER 
group by o.ID_ORDER, o.DISCOUNT, o.DATE, o.DELIVERY); 

我的查詢返回每個訂單的總成本,這就是我想要在我的表中。我得到一個「單行子查詢返回多行」錯誤。 我不知道我在做什麼錯,有什麼建議?

回答

2

爲了使您的更新工作,子查詢(SELECT SUM ...)需要爲每個訂單返回一行。但根據錯誤消息,它肯定會返回多行。

主要的問題當然是沒有謂詞將當前行更新到子查詢。所以,你至少需要這樣的東西添加到子查詢:

o.ID_ORDER = ORDERS.ID_ORDER 

此外,GROUP BY子句中往往會產生多行進行更新。它只需要減少到o.ID_ORDER。

第三個問題是運送成本,應該總結,但在最後加上。因此,他們必須被搬出的子查詢:

update ORDERS 
set TOTAL_COST = (
    select sum((p.COST*i.QUANTITY)*(1-o.DISCOUNT)) as TOTAL_COST 
    from PRODUCT p, ITEM i, ORDERS o 
    where o.ID_ORDER = ORDERS.ID_ORDER and p.ID_PRODUCT = i.ID_PRODUCT and i.ID_ORDER = o.ID_ORDER 
    group by o.ID_ORDER 
) + delivery(DELIVERY); 
+0

不工作「而不是GROUP BY表情說:」錯誤 – zkranc

+0

我已經做了進一步的修正和移動交付成本出的子查詢。 – Codo

+0

感謝您的幫助,但我不認爲問題是可以通過這種方式解決的,我最好只是創建一個新表格 – zkranc