尝试使用 ROW_NUMBER 更新 mysql 8.0 中的 table 在子查询中失败

Trying to update a table in mysql 8.0 using ROW_NUMBER fails within the subquery

我正在尝试使用 mysql 中的 ROW_NUMBER 更新数据库中的 table。

Table stats:

id  value           value_rank
-------------------------------
1   635550348443    NULL
2   615342703162    NULL
3   968101508609    NULL
4   976724336509    NULL
5   978154497567    NULL

我尝试单独使用 ROW_NUMBER 作为:

SELECT id, value, ROW_NUMBER() OVER w AS value_rank FROM stats WINDOW w AS (ORDER BY value DESC)

得到如下结果:

id  value           value_rank
-------------------------------
5   978154497567    1
4   976724336509    2
3   968101508609    3
1   635550348443    4
2   615342703162    5

然后,我尝试使用以下语句更新 value_rank:

UPDATE stats
(SELECT id, value, ROW_NUMBER() OVER w AS rank FROM stats WINDOW w AS (ORDER BY value DESC)) as ranks 
SET stats.value_rank = ranks.rank
WHERE stats.id = ranks.id;

但是,我收到以下错误:

Error in query (1064): Syntax error near '(SELECT id, value, ROW_NUMBER() OVER w AS rank FROM stats WINDOW w AS (O' at line 2

我在遵循此 documentation(最后一段)后使用了此查询

我做错了什么?

你需要JOIN:

UPDATE stats s JOIN
       (SELECT id, value, ROW_NUMBER() OVER w AS rank
        FROM stats
        WINDOW w AS (ORDER BY value DESC)
       ) r
       ON s.id = r.id 
    SET s.value_rank = t.rank;