PostgreSQL UPDATE - 查询左连接问题

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)

  • no - p是subselect的别名,它是完美定义的. (5认同)