mysql - MySQL - 如何通过其他唯一列设置一列数据
问题描述
我有一个包含 3 列的 MySQL 表:
title
| element_id
|id
id
已被 auto_incremented 为 int。
我想element_id
根据 的描述递增title
,这样如果 的值title
是唯一的,则按 的顺序id
,element_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
解决方案
在 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;
推荐阅读
- arrays - Swift:如何使用 UISwitch 将项目添加到数组中?
- snmp - SNMP v3 网络源限制?
- angular - 只有当 Firebase 应用实例是默认实例时,性能才能开始
- python - 如何使用 TKinter 使两个测试按钮运行两个相互独立的功能?Python3
- r - 带有闪亮和 ggplotly 轴标签的奇怪行为
- django - 如何将 POST 方法写入 Django 中的标签
- cordova - Cordova 9+“无法通过注册表获取插件”
- typescript - 我如何要求特定的参数组合(即省略所需的别名)?
- flutter - 如何去除表格末尾的间距
- npm - npm 注册表,是否可以将 Java 或 C# 库发布到 npm 注册表中