我有一个包含以下字段的表: ID,VALUES,VARIAB
我试图对字段VALUES进行求和,但需要按ID进行分组。 而Subselect不接受多行。 (当我只使用1个ID时,工作正常)。
BEGIN
UPDATE TBL2
SET SOMA =
(SELECT SUM(x.VALUES)
FROM TBL3 x INNER JOIN TBL2 y
ON y.ID = x.ID
WHERE y.ID = x.ID AND X.VARIAB = 1
GROUP BY x.ID
);
END;
我正在使用ORACLE DB,如果有人评论这个病,那就非常感激。 对不起我的英文缺陷。
答案 0 :(得分:2)
要一次更新多个记录和/或进行upsert,请使用MERGE语句,如下所示:
MERGE INTO TBL2 T2 USING (
SELECT x.id,SUM(x.VALUES) total
FROM TBL3 x
WHERE x.VARIAB = 1
GROUP BY x.ID
) T3 ON (T2.ID = T3.ID)
WHEN MATCHED THEN UPDATE
SET T2.SOMA = T3.TOTAL
答案 1 :(得分:0)
问题是您的更新声明没有相关性 - 即。您的子查询没有引用正在更新的表。
您可以将其更改为:
update tbl2 t2
set soma = (select sum(t3.values)
from tbl3 t3
where t2.id = t3.id
and t3.variab = 1);