select中的嵌套更新

时间:2014-04-04 15:31:58

标签: mysql

我正在执行

SELECT id as uid, (
    UPDATE trans SET paidout=1
        WHERE user_id=uid AND SUM(amount)>0.5234
)
FROM accounts

但没有成功,为什么这不起作用?

2 个答案:

答案 0 :(得分:0)

您可以使用子查询首先接收来自user_id的所有trans amount的总和大于0.5234。然后使用INNER JOIN匹配user_id语句和UPDATE trans中的所有SET paidout = 1值。

不需要涉及accounts表。

UPDATE trans
    INNER JOIN (
        SELECT user_id
            FROM trans
            GROUP BY user_id
            HAVING SUM(amount) > 0.5234
    ) AS users
    ON trans.user_id = users.user_id
    SET paidout = 1;

DEMO @ SQL Fiddle

答案 1 :(得分:0)

您使用了错误的语法,您可以在更新查询中使用select作为子查询,但是在select查询中,如果要从trans表更新paidout并且方案user_id相同,则无法执行更新子查询作为帐户表中的id和用户数量之和应该大于0.5234,你可以这样做

UPDATE trans t
JOIN accounts  ON(t.user_id = a.id)
JOIN 
(SELECT user_id FROM trans GROUP BY user_id HAVING SUM(amount) > 0.5234 ) tt
ON(tt.user_id = a.id)
GROUP BY a.id
SET t.paidout=1