mysql - 在 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
请帮忙。
解决方案
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;
推荐阅读
- makefile - Makefile 循环:“命令未找到错误”在循环开始之前弹出,但之后工作正常
- java - 将 Gradle 父目录中的文件加载到 Java 测试中
- vb.net - 如何在运行时加载引用另一个程序集的程序集
- ios - 未定义符号:将 Xcode 更新到 11.1 版后出现 _OBJC_CLASS_$_WKInterfaceController 错误
- git - `git pull` 是否仅将更改合并到签出的分支中?
- bash - 如何获取没有最后 N 个字符的字符串?
- ios - xcodebuild - 在私人模拟器上运行
- c# - 发布新版本的应用程序时,如何在不丢失数据的情况下向数据库添加列?
- python-2.7 - python中排序(非常)大的网状列表/字典
- python-3.x - 如何在python中对超过1个数字的文件进行排序?