尝试使用 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;
我正在尝试使用 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;