1

我有一个问题

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 从奖金添加到用户帐户?上面的查询没有做任何事情 oO

4

1 回答 1

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。从文档

使用 FROM 时,应确保连接为要修改的每一行生成最多一个输出行。换句话说,目标行不应连接到来自其他表的多个行。如果是这样,那么只有一个连接行将用于更新目标行,但将使用哪一个是不容易预测的。

sql fiddle demo

于 2013-09-13T05:40:02.920 回答