首页 > 解决方案 > 在 JOIN 语句上使用 ORDER BY 和 LIMIT 的 MYSQL UPDATE 查询

问题描述

我正在尝试进行更新查询,该查询将对rewards_balance按购买日期排序的仅有 5 个用户进行求和。

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

请帮忙。

标签: mysql

解决方案


ORDER BY并且LIMIT不允许在多表 UPDATE 中使用。请参阅文档

你可以这样做:

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;

推荐阅读