【问题标题】:Remove duplicate rows from table [duplicate]从表中删除重复的行[重复]
【发布时间】:2012-10-21 01:04:03
【问题描述】:

可能重复:
Remove duplicate rows in MySQL

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

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

表格看起来像这样(我想在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

【问题讨论】:

  • 如果我没记错的话,只需创建一个UNIQUE 索引即可删除重复项。如果没有,只需创建一个临时表即可INSERT ... SELECT DISTINCT id...
  • 为什么(2, a) 比(2, b) 更受欢迎?
  • @eggyal: 2, a 不比2, b 好,但其中一个必须去,我不在乎哪个。 @njk:尝试创建唯一索引会导致错误

标签: mysql phpmyadmin


【解决方案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;

【讨论】:

    【解决方案2】:
    ALTER IGNORE TABLE my_table ADD UNIQUE INDEX (id);
    

    【讨论】:

    【解决方案3】:
    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)
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2021-12-25
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2011-09-28
      • 2011-07-18
      相关资源
      最近更新 更多