我正在执行
SELECT id as uid, (
UPDATE trans SET paidout=1
WHERE user_id=uid AND SUM(amount)>0.5234
)
FROM accounts
但没有成功,为什么这不起作用?
答案 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