首页 > 解决方案 > MySQL - 如何通过其他唯一列设置一列数据

问题描述

我有一个包含 3 列的 MySQL 表: title| element_id|id

id已被 auto_incremented 为 int。

我想element_id根据 的描述递增title,这样如果 的值title是唯一的,则按 的顺序idelement_id将从 1 增加到 ...

表格外观示例:

title, element_id, id
Baker, 1, 1
Baker, 2, 2
Plumber, 1, 3
Plumber, 2, 4
Plumber, 3, 5
Doctor, 1, 6

当您知道标题的名称时,我发现了有关如何执行此操作的堆栈帖子,例如执行类似的操作

UPDATE table_name SET element_ID = 1 
WHERE title = 'Baker';

但在这种情况下,没有自动递增,我们必须知道表的名称title才能更改表。但是,这怎么能用任何title名字来完成呢?

另外 - 为了使这个问题更容易,所有的titles都在表中组织在一起(即没有混合titles如下)

title, element_id, id
Baker, 1, 1
Plumber, 1, 2
Baker, 2, 3
Plumber, 2, 4
Plumber, 3, 5
Doctor, 1, 6

标签: mysqlsqlalter-table

解决方案


在 MySQL 8+ 中,您可以使用窗口函数:

update table_name t join
       (select t.*, row_number() over (partition by title order by id) as seqnum
        from t
       ) tt
       on tt.id = t.id
    set t.element_id = tt.seqnum;

推荐阅读