2014-12-02 57 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

相关问题