2

可能重复:
删除 MySQL 中的重复行

我想在一个巨大的表中为单个属性创建一个唯一索引,但是有重复的值,所以我需要删除重复。只能删除重复的记录。phpmyadmin 或 mysql 查询中执行此操作的最佳解决方案是什么?

我想出的唯一解决方案是选择另一个表,但我更愿意从原始表中删除数据。

该表看起来像这样(我想把唯一索引放在id

|id|...
+--+---
| 1|x
| 2|a   <-- duplicity
| 2|b   <-- duplicity
| 3|c
| 4|d

这将是最好的结果

|id|...
+--+---
| 1|x
| 2|a
| 3|c
| 4|d

这也是可以接受的结果

|id|...
+--+---
| 1|x
| 3|c
| 4|d
4

3 回答 3

4
ALTER IGNORE TABLE my_table ADD UNIQUE INDEX (id);
于 2012-10-31T14:34:15.353 回答
1
DELETE FROM table 
WHERE id IN 
   (SELECT id FROM table, (SELECT id, count(*) dNum FROM table GROUP BY id) x 
     WHERE id = x.id      
   ORDER BY id DESC LIMIT dNum-1)
于 2012-10-31T14:56:32.110 回答
1
DELETE  a 
FROM    tableName a
        LEFT JOIN
            (
                SELECT id, min(colName) x
                FROM tableName
                GROUP BY id
            ) c
        ON a.id = c.id AND
            a.colName = c.x
WHERE c.id IS NULL;
于 2012-10-31T14:31:50.860 回答