如何解决在 JOIN 语句上使用 ORDER BY 和 LIMIT 的 MYSQL UPDATE 查询
我正在尝试执行 UPDATE 查询,该查询将对仅按购买日期排序的 5 个用户的 rewards_balance
求和。
Users
表是:
id rewards_balance
1 0
2 20
3 0
4 23
5 11
6 45
7 1
8 0
9 0
10 10
这是我的 subscription
表
payer_id created
1 1616137161
2 1616137165
5 1616137166
7 1616137167
3 1616137168
4 1616137169
9 1616137175
UPDATE 查询应该以这样一种方式工作,它将向首先订阅的 5 个用户添加固定数量。所以UPDATE后的输出应该如下
id rewards_balance
1 0+20
2 20+20
3 0+20
4 23
5 11+20
6 45
7 1+20
8 0
9 0
10 10
如您所见,20 只会添加到那些先订阅的 ID 中。
到目前为止我尝试过的是:
UPDATE users u LEFT JOIN subscription m ON u.id = m.payer_id SET u.rewards_balance = u.rewards_balance+20
ORDER BY `m`.`created` ASC LIMIT 10
我不断收到以下错误。
Query error: Incorrect usage of UPDATE and ORDER BY
请帮忙。
解决方法
ORDER BY
和 LIMIT
在多表 UPDATE 中是不允许的。见documentation。
您可以改为这样做:
UPDATE users u
JOIN (
SELECT m.payer_id
FROM subscription m
ORDER BY `m`.`created`
LIMIT 10
) q on q.payer_id=u.id
SET u.rewards_balance = u.rewards_balance+20;