Dmi*_*tro 9 postgresql left-join
UPDATE user
SET balance = balance + p.amount
FROM payments p WHERE user.id = p.user_id AND p.id IN (36,38,40)
Run Code Online (Sandbox Code Playgroud)
但它增加了余额,只有第一笔付款的价值金额1936.请帮助我如何解决它,我不想在代码中循环运行大量的请求.
Qua*_*noi 20
在多表中UPDATE,目标表中的每一行只更新一次,即使连接多次返回也是如此.
来自文档:
当存在
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10055 次 |
| 最近记录: |