You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

T-SQL UPDATE语句累加结果不符问题排查

多表UPDATE累加失败的原因及解决办法

嘿,我来帮你搞明白为啥更新结果和预期不一样!

问题出在哪?

你看你的SELECT查询返回了两条记录:a.ID=1分别匹配了b表中Total为250和500的两行。但当你用UPDATE语句关联这两个表时,大多数数据库(比如MySQL、SQL Server)不会对a表的同一行做多次累加更新——简单说,数据库只会用其中一次匹配到的Total值来更新,而不是把两个值加起来。

比如你的情况,数据库可能只取了第一条匹配的250来计算,1000+250=1250,这就是你看到的实际结果;如果它取第二条的500,结果就是1500,但不管怎样都不会是1750,因为它没把两个值累加起来。

怎么解决?

要实现把所有匹配的Total值都累加,得先把b表中符合条件的Total先求和,再和a表关联更新。给你两个靠谱的方案:

方案一:子查询先聚合总和

先通过子查询算出b表中对应记录的Total总和,再和a表关联更新:

UPDATE a
INNER JOIN (
    SELECT IID, SUM(Total) AS TotalSum
    FROM b
    WHERE ID=19 AND IsActive=1
    GROUP BY IID
) AS b_agg ON b_agg.IID = a.ID
SET a.Wallet = a.Wallet + b_agg.TotalSum;

方案二:用关联子查询直接更新

如果确定只更新a表中特定的行,也可以直接在UPDATE里嵌套求和子查询:

UPDATE a
SET Wallet = Wallet + (
    SELECT SUM(Total)
    FROM b
    WHERE IID=a.ID AND ID=19 AND IsActive=1
)
WHERE EXISTS (
    SELECT 1
    FROM b
    WHERE IID=a.ID AND ID=19 AND IsActive=1
);

这两种方法都能确保把所有匹配的Total值加起来,让a.Wallet从1000变成1750,符合你的预期~

内容的提问来源于stack exchange,提问作者Zibian Domichi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:29:34