2014-12-02 31 views
0

我需要使用select子查詢的結果更新一個表中的列(並且它們最終應該是不同)。但是當我這樣做的時候,我得到了幾百條記錄的完全相同的數字,或者我得到了ORA-01427:單行子查詢返回多個行查詢。錯誤。使用select子查詢執行更新查詢,返回所有記錄的相同值或ora-01427錯誤

你能看看我看到的是什麼嗎? (我可能只是遠眺所有我知道的東西簡單)

UPDATE WD_PRODUCT_CLASS 
SET CURRENT_CASES = ( WITH STUFF_COUNT AS 
(
SELECT sum(CURRENT_DETAIL.COMBINED_QTY) AS TOTAL_CASES 
    FROM CURRENT_DETAIL, SKU_MAJORS, WD_PRODUCT_CLASS 
    WHERE CURRENT_DETAIL.LOC_ID = 
     &PARM_LOC_ID 
    AND CURRENT_DETAIL.INVEN_ID = SKU_MAJORS.INVEN_ID 
    AND WD_PRODUCT_CLASS.CATEGORY = SKU_MAJORS.CONT_DESC 
    GROUP BY WD_PRODUCT_CLASS.CATEGORY 
) 
    (
    SELECT SUM(Z.TOTAL_CASES) FROM STUFF_COUNT Z 
) 
); 
+0

如果您執行子查詢返回多少行? – mmmmmpie 2014-12-02 19:56:44

+0

我從中收到8張。 – 2014-12-02 21:22:05

回答

1

也許你需要成纔是這樣的:由於您使用的是不

UPDATE WD_PRODUCT_CLASS wpc 
SET wpc.CURRENT_CASES = ( 
    SELECT sum(cd.COMBINED_QTY) 
    FROM CURRENT_DETAIL cd join SKU_MAJORS sm ON cd.INVEN_ID = sm.INVEN_ID 
    WHERE cd.LOC_ID = &PARM_LOC_ID 
     AND sm.CONT_DESC = wpc.CATEGORY 
     ) 
WHERE 1=1; -- if you don't set a condition all the rows will be updated 

您所查詢的更新表相同的值SET子句中的相關子查詢。此子查詢不依賴於父查詢,因此只計算一次。

我想你需要一個相關的子查詢,所以我改變了你的更新+刪除了一些額外的部分。

+0

謝謝。這解決了我的問題。再次感謝。 – 2014-12-02 21:26:45

相關問題