我有一个查询
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
答案 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 强>