从Postgresql中的<many>更新<one> </many> </one>

时间:2013-09-13 05:30:20

标签: sql postgresql sql-update

我有一个查询

UPDATE
    users u
SET
    amount = u.amount + b.sumwin
FROM
    bonus b
WHERE
    b.user_id = u.id AND
    b.pay = 0 AND
    b.autopay = 1 AND
    b.sumwin > 0;

一个用户记录与许多奖励记录有关。我怎样才能将sumwin从奖金添加到用户帐户?上面的查询没有做任何事o.O

1 个答案:

答案 0 :(得分:1)

with cte as (
    select b.user_id, sum(b.sumwin) as sumwin
    from bonus as b
    where
        b.pay = 0 and
        b.autopay = 1 and
        b.sumwin > 0
    group by b.user_id
)
update users as u set
    amount = u.amount + b.sumwin
from cte as b
where b.user_id = u.id;

<强> sql fiddle demo

您的查询应该部分工作,即从一个任意行添加sumwin。来自documentation

  

使用FROM时,应确保连接最多产生一个   要修改的每一行的输出行。换句话说,目标行   不应该从其他表连接到多行。如果它   然后,只有一个连接行将用于更新目标   行,但哪一个将被使用是不容易预测的。

<强> sql fiddle demo