一种方法:
UPDATE user_table u
JOIN ( SELECT q.userid
, SUM(1.00) AS deposit
FROM (
-- original OP query goes here
) q
GROUP BY q.userid
) r
ON r.userid = u.userid
SET u.balance = u.balance + r.deposit
我们使用返回显示结果集的原始 OP 查询,并将其设为内联视图(在上面的查询中别名为q)。
由此,我们查询一个不同的用户 ID 列表,以及该用户 ID 在结果集中出现的次数。这给了我们用户名和存款金额(每次用户 ID 出现时 1 美元)(一些数据库可能希望我们将值指定为 1.0 而不是 1,以确保它是十进制的。我认为 SUM 更能代表我们正在努力实现的目标。)
我们将该内联视图 ( r ) 加入到用户表中,并将存款金额添加到该用户的当前余额中(假设余额存储为十进制美元(1.00 = 1 美元)
要进行测试,请将 转换UPDATE
为SELECT
语句:
- 删除“
SET
”子句
- 添加“
ORDER BY
”子句(可选)以使结果确定
- 删除“
UPDATE
”关键字并替换它
和:
SELECT r.userid
, r.deposit
, u.balance AS old_balance
, u.balance + r.deposit AS new_balance
, u.userid
FROM
全选:
SELECT r.userid
, r.deposit
, u.balance AS old_balance
, u.balance + r.deposit AS new_balance
, u.userid
FROM user_table u
JOIN ( SELECT q.userid
, SUM(1.00) AS deposit
FROM (
-- original OP query goes here
) q
GROUP BY q.userid
) r
ON r.userid = u.userid
注意没有 WHERE 子句,JOIN 谓词(在 ON 子句中)决定用户表中选择/影响哪些行。