#1221 - UPDATE和ORDER BY的使用不正确

Der*_*n81 5 mysql join

为了绕过我在另一个帖子中发布的问题.我试过像这样的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子句,该语句可以正常工作.是否有人知道这个问题的解决方案?

100*_*111 7

在多个表的情况下,您不能在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_keyt.primary_key通过user表的主键.


阅读前几段http://dev.mysql.com/doc/refman/5.7/en/update.html

  • 这在 MariaDB 中不起作用,因为 ORDER BY 在子查询中被忽略。https://mariadb.com/kb/en/library/why-is-order-by-in-a-from-subquery-ignored/ (2认同)