我有一张桌子上有一些ID +标题.我想让标题栏独一无二,但它已经有超过600k的记录,其中一些是重复的(有时是几十次).
如何删除所有重复项,除了一个,所以我可以在标题列之后添加一个UNIQUE键?
unu*_*tbu 79
此命令添加唯一键,并删除所有生成错误的行(由于唯一键).这会删除重复项.
ALTER IGNORE TABLE table ADD UNIQUE KEY idx1(title);
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,对于某些版本的MySQL ,此命令可能不适用于InnoDB表.有关解决方法,请参阅此帖子.(感谢"匿名用户"提供此信息.)
nc3*_*c3b 10
创建一个只包含原始表的不同行的新表.可能还有其他方法,但我发现这是最干净的.
CREATE TABLE tmp_table AS SELECT DISTINCT [....] FROM main_table
Run Code Online (Sandbox Code Playgroud)
更具体地说:
更快的方法是将不同的行插入临时表中.使用删除,我花了几个小时从一个800万行的表中删除重复项.使用insert和distinct,只花了13分钟.
CREATE TABLE tempTableName LIKE tableName;
CREATE INDEX ix_all_id ON tableName(cellId,attributeId,entityRowId,value);
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value) SELECT DISTINCT cellId,attributeId,entityRowId,value FROM tableName;
DROP TABLE tableName;
INSERT tableName SELECT * FROM tempTableName;
DROP TABLE tempTableName;
Run Code Online (Sandbox Code Playgroud)