-1

这是一个我不明白的错误:

     mysql> UPDATE gp
    -> SET gp.gpid = gp.new_gpid
    -> FROM (
    ->       SELECT gpid, ROW_NUMBER() OVER (ORDER BY [gpid]) AS new_gpid
    ->       FROM gp
    ->       ) gp;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (
      SELECT gpid, ROW_NUMBER() OVER (ORDER BY [gpid]) AS new_gpid
      ' at line 3

据我所知,嵌套SELECTFROM语句中似乎已贬值。

我正在使用 mysql 8.0.21

任何帮助使这个查询工作将不胜感激。

谢谢

编辑 1:我想要实现的是用行号而不是实际AUTO_INCREMENTid 更新 gpid 列,其中包含 id 之间的间隙,这篇文章中的解释Change mysql auto increment id column value

4

2 回答 2

0

您的嵌套查询正在从“gp”中选择,但随后别名为“gp”,它无法从自身中选择。

于 2020-11-20T14:58:49.177 回答
0

UPDATE... FROM ...MySql 不支持该语法。
您可以使用JOIN

UPDATE gp 
INNER JOIN (
  SELECT gpid, ROW_NUMBER() OVER (ORDER BY gpid) AS new_gpid
  FROM gp
) t ON t.gpid = gp.gpid
SET gp.gpid = t.new_gpid; 

查看简化的演示

于 2020-11-20T16:32:27.850 回答