编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。
注意:您 需要 首先在表的 测试副本 上执行此操作!
完成此操作后,我发现,除非也包含AND n1.id <> n2.id
,否则它将删除表中的每一行。
如果要使行保持最低
id
值:DELETe n1 FROM names n1, names n2 WHERe n1.id > n2.id AND n1.name = n2.name
如果要保持最高
id
值的行:DELETe n1 FROM names n1, names n2 WHERe n1.id < n2.id AND n1.name = n2.name
我在MySQL 5.1中使用了这种方法
不确定其他版本。
更新:由于人们在谷歌上搜索删除重复项的操作最终在此处进行,
尽管OP的问题是关于
DELETe,但请注意使用
INSERT和
DISTINCT会更快。对于具有800万行的数据库,以下查询花费了13分钟,而使用
DELETE,则花费了2个多小时,但尚未完成。
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value) SELECT DISTINCT cellId,attributeId,entityRowId,value FROM tableName;


![删除除MySQL中所有重复行以外的所有重复行?[重复] 删除除MySQL中所有重复行以外的所有重复行?[重复]](http://www.mshxw.com/aiimages/31/367883.png)
