我需要使用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 :(得分: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子句中使用了不相关的子查询。此子查询不依赖于父查询,因此它只计算一次。
我想你需要一个相关的子查询,所以我更改了你的更新+删除了一些额外的部分。