现有baz
表:
+----+-------+
| id | label |
+----+-------+
| 1 | foo |
+----+-------+
| 2 | foo |
+----+-------+
| 3 | bar |
+----+-------+
目标是:
UNIQUE
列添加label
索引来更改表格; label
字段; 注意:我想避免复制该表,因为它可能有数千个唯一字段,而只有2-3个重复字段。
注2:我想使用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 ; 答案 0 :(得分:2)
在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;