首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找并重命名重复的

查找并重命名重复的
EN

Stack Overflow用户
提问于 2018-03-20 11:10:50
回答 1查看 131关注 0票数 1

有一个现有的baz表:

代码语言:javascript
运行
复制
+----+-------+
| id | label |
+----+-------+
|  1 | foo   |
+----+-------+
|  2 | foo   |
+----+-------+
|  3 | bar   |
+----+-------+

目标是:

  • 通过向UNIQUE列添加一个label索引来更改表;
  • 定位并重命名重复的label字段;

注意:我想避免复制表,因为它可能有数千个唯一的字段,而只有2-3个重复。

NOTE2:我想用id作为重命名标签的后缀,例如第二个foo变成foo_2

添加索引:

代码语言:javascript
运行
复制
ALTER TABLE baz ADD UNIQUE (label);

现在,定位和重命名副本的最佳方法是什么?

编辑:我想:

代码语言:javascript
运行
复制
UPDATE (SELECT label, COUNT(*) c FROM baz GROUP BY label HAVING c > 1) t 
SET t.label = (t.label + t.id);

代码语言:javascript
运行
复制
UPDATE baz t1 INNER JOIN baz t2
SET t2.label = t2.label + t2.id 
WHERE t1.label = t2.label;

基本上,它将:

  1. 使用SELECT查询获取副本;
  2. 处理查询并设置label类标签+id的值;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-20 11:16:18

在MySQL中,可以使用变量添加后缀:

代码语言:javascript
运行
复制
set @l = '';
set @rn = 0;

update baz
    set label = concat_ws('_', label,
                          if(@l = label, @rn := @rn + 1,
                             nullif(if(@l := label, @rn := 0, @rn := 0), 0)
                            )
                         )
    order by label, id;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49382686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档