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)