为了绕过我在另一个帖子中发布的问题.我试过像这样的sql语句:
UPDATE user u JOIN (SELECT @i := 0) r
SET user_rank_planets = (@i := (@i + 1))
WHERE user_active=1
ORDER BY user_planets DESC
Run Code Online (Sandbox Code Playgroud)
我收到错误#1221.没有order by子句,该语句可以正常工作.是否有人知道这个问题的解决方案?
在多个表的情况下,您不能在update语句中使用order by和limit.
引用MySQL文档:
对于多表语法,UPDATE更新table_references中指定的满足条件的每个表中的行.每个匹配的行都会更新一次,即使它与条件多次匹配也是如此.对于多表语法,不能使用ORDER BY和LIMIT.
UPDATE user u
INNER JOIN
(
SELECT
*,
(@i := (@i + 1)) AS row_number
FROM user u
CROSS JOIN (SELECT @i := 0) r
WHERE user_active=1
ORDER BY user_planets DESC
)AS t
ON u.Primary_key = t.primary_key
SET u.user_rank_planets = t.row_number.
Run Code Online (Sandbox Code Playgroud)
注意:替换u.Primary_key
并t.primary_key
通过user
表的主键.
阅读前几段http://dev.mysql.com/doc/refman/5.7/en/update.html
归档时间: |
|
查看次数: |
4664 次 |
最近记录: |