有一个现有的baz
表:
+----+-------+
| id | label |
+----+-------+
| 1 | foo |
+----+-------+
| 2 | foo |
+----+-------+
| 3 | bar |
+----+-------+
目标是:
UNIQUE
列添加一个label
索引来更改表;label
字段;注意:我想避免复制表,因为它可能有数千个唯一的字段,而只有2-3个重复。
NOTE2:我想用id
作为重命名标签的后缀,例如第二个foo
变成foo_2
。
添加索引:
ALTER TABLE baz ADD UNIQUE (label);
现在,定位和重命名副本的最佳方法是什么?
编辑:我想:
UPDATE (SELECT label, COUNT(*) c FROM baz GROUP BY label HAVING c > 1) t
SET t.label = (t.label + t.id);
或
UPDATE baz t1 INNER JOIN baz t2
SET t2.label = t2.label + t2.id
WHERE t1.label = t2.label;
基本上,它将:
SELECT
查询获取副本;label
类标签+id的值;发布于 2018-03-20 11:16:18
在MySQL中,可以使用变量添加后缀:
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;
https://stackoverflow.com/questions/49382686
复制相似问题