我能够使用此查询找出重复的数据
SELECT names FROM group GROUP BY names HAVING count(*) > 1
Run Code Online (Sandbox Code Playgroud)
我能够获取重复数据.我只需要知道如何将这个重复数据重命名为new
INPUT
+-----------------+
| names |
+-----------------+
| text1 |
| text2 |
| text3 |
| text1 |
| text3 |
| text4 |
+-----------------+
OUTPUT
+-----------------+
| names |
+-----------------+
| text1 |
| text2 |
| text3 |
| text1 new value |->RENAMED
| text3 new value |->RENAMED
| text4 |
+-----------------+
Run Code Online (Sandbox Code Playgroud)
Kib*_*bee 13
假设您在表上有某种主键,例如自动增量ID,您可以执行以下操作.
UPDATE group
SET names = CONCAT(names,' Copy 1')
WHERE ID IN
(
SELECT MAX(ID)
FROM group
GROUP BY names
HAVING count(*) > 1
);
Run Code Online (Sandbox Code Playgroud)
为了解释,它将找到任何带有重复的内容,为该集合中的任何内容选取最大ID,并将"副本1"附加到其末尾.如果你有3次或更多次某些名字,你可能仍然有一些重复.再次运行它,这次使用'copy 2'而不是'copy 1'.继续重复这个过程,直到你摆脱所有的副本.
更新.要从@Yahia借用一个想法并使用UUID,如果要在一个查询中完成所有操作,可以执行以下操作.
UPDATE group
SET names = CONCAT(names, CONCAT ( ' Copy ', UUID_SHORT() ) )
WHERE
ID NOT IN
(
SELECT MIN(ID)
FROM group
GROUP BY names
HAVING count(*) > 1
) AND
ID IN
(
SELECT ID
FROM group AS G1
INNER JOIN group AS G2
ON G1.names = G2.names AND G1.ID <> G2.ID
);
Run Code Online (Sandbox Code Playgroud)