如何从MySQL表中删除所有重复数据?
例如,具有以下数据:
SELECT * FROM names; +----+--------+ | id | name | +----+--------+ | 1 | google | | 2 | yahoo | | 3 | msn | | 4 | google | | 5 | google | | 6 | yahoo | +----+--------+
我会使用,SELECT DISTINCT name FROM names;如果它是一个SELECT查询。
SELECT DISTINCT name FROM names;
SELECT
我该怎么做DELETE才能只删除重复项并仅保留每个记录一个?
DELETE
编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。
注意:您 需要 首先在表的 测试副本 上执行此操作!
完成此操作后,我发现,除非也包含AND n1.id <> n2.id,否则它将删除表中的每一行。
AND n1.id <> n2.id
如果要使行的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中使用了这种方法
不确定其他版本。
更新:由于使用Google搜索来删除重复项的人员最终会出现在此处 尽管OP的问题是关于DELETE,但请注意使用INSERT和DISTINCT会更快。对于具有800万行的数据库,以下查询花费了13分钟,而使用DELETE,则花费了2个多小时,但尚未完成。
INSERT
DISTINCT
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value) SELECT DISTINCT cellId,attributeId,entityRowId,value FROM tableName;