在 MySQL 5.7 中更新列枚举行号
Posted
技术标签:
【中文标题】在 MySQL 5.7 中更新列枚举行号【英文标题】:Update column enumerating row number in MySQL 5.7 【发布时间】:2021-02-25 21:17:32 【问题描述】:我在 mysql 5.7 中遇到了一个查询。 简化,我有一个像这样的临时表:
guid B C
2 aa 55
5 ab 66
7 ac 77
9 ad 88
我想要做的是,将列 guid 变成从 1 开始的枚举,同时不触及其他列中的任何数据:
guid B C
1 aa 55
2 ab 66
3 ac 77
4 ad 88
我一直在寻找涉及 ROW_NUMBER 和 ROW_ID 的解决方案,但我的语法不被接受:
UPDATE temp_table
SET temp_table.guid = temp_table.New_guid
FROM (
SELECT guid, ROW_NUMBER() OVER (ORDER BY [guid]) AS New_guid
FROM temp_table
) x
我尝试采用this question 的上述内容,但它一直说“FROM 在此位置不是有效输入”。
【问题讨论】:
【参考方案1】:你可以使用变量:
set @rn = 0;
update temp_table
set guid = (@rn := @rn + 1)
order by guid;
如果您实际上并不关心当前的排序,您可以使用:
update temp_table tt cross join
(select @rn := 0) params
set tt.guid = (@rn := @rn + 1);
很遗憾,当update
具有join
时,您不能使用order by
。
【讨论】:
之前没有考虑过变量的使用。非常感谢,这很有教育意义!以上是关于在 MySQL 5.7 中更新列枚举行号的主要内容,如果未能解决你的问题,请参考以下文章