UPDATE user
SET balance = balance + p.amount
FROM payments p WHERE user.id = p.user_id AND p.id IN (36,38,40)
但它仅在首次付款中增加余额的价值金额为1936。请告诉我如何修复它,我不想在代码中运行大量请求以创建循环。
UPDATE user
SET balance = balance + p.amount
FROM payments p WHERE user.id = p.user_id AND p.id IN (36,38,40)
请使用这个替代方案:当存在FROM子句时,实际上发生的是将目标表与fromlist中提到的表连接,每个连接的输出行都代表目标表的更新操作。使用FROM时,应确保连接对于要修改的每行最多产生一个输出行。换句话说,目标行不应与来自其他表的多行连接。如果确实如此,则只使用其中一个连接行来更新目标行,但将使用哪个连接行并不容易预测。
UPDATE user u
SET balance = balance + p.amount
FROM (
SELECT user_id, SUM(amount) AS amount
FROM payment
WHERE id IN (36, 38, 40)
GROUP BY
user_id
) p
WHERE u.id = p.user_id