0

我有一个包含大约 1M 条记录的数据库表。我需要在此表中找到所有重复的名称并使它们唯一。

标识名称

1 A 2 A 3 B 4 C 5 C 应该改为...

标识名称

1 A 2 A-1 3 B 4 C 5 C-1 是否有使用 mysql 查询或过程执行此操作的有效方法?

提前致谢!

4

1 回答 1

1

我需要做一些类似于我正在处理的桌子的事情。我需要一个唯一的 URL 字段,但以前的数据保存者没有保留这些约束。关键是创建一个临时表。

我在这里使用此响应来提供帮助:MySQL 错误 1093 - 无法在 FROM 子句中指定要更新的目标表

请注意,它的性能并不好,但是如果您只需要在数据库上运行一次来​​清理表,那么它应该不会那么糟糕。

UPDATE `new_article` `upd`
SET `upd`.`url` = CONCAT(`upd`.`url`, '-', `upd`.`id`)
WHERE `upd`.`url` IN(
    SELECT `url` FROM (
        SELECT `sel`.`url` FROM `new_article` `sel`
        GROUP BY `sel`.`url` HAVING count(`sel`.`id`) > 1
    ) as `temp_table`
); 
于 2013-05-01T15:40:40.047 回答