使用select子查询执行更新查询,返回所有记录的相同值或ora-01427错误

时间:2014-12-02 19:42:01

标签: sql oracle sql-update subquery

我需要使用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 
 )
);

1 个答案:

答案 0 :(得分: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子句中使用了不相关的子查询。此子查询不依赖于父查询,因此它只计算一次。

我想你需要一个相关的子查询,所以我更改了你的更新+删除了一些额外的部分。