删除重复的行MySQL

时间:2015-05-28 17:44:31

标签: mysql duplicates mysql-workbench duplicate-removal navicat

我一直在尝试从表中删除重复的行,但我的所有努力都会导致错误或在执行期间卡住。 我的表有1680万条记录,其中包括150万条重复记录。 表结构如下

--------------------------------------
| id | number | city | region | site |
--------------------------------------
| 1  | 12345  | abc  | xyz    | 321  |
| 2  | 67890  | def  | axc    | 167  |
| 3  | 12345  | abc  | xyz    | 321  |
| 4  | 13400  | fff  | aaa    | 301  |
--------------------------------------

我已尝试使用堆栈溢出中的答案中提出的一些方法,但无法找到适用于我的解决方案。

DELETE n1 FROM data n1, data n2 WHERE n1.id > n2.id AND n1.number = n2.number

没有工作,所以我尝试了以下:

DELETE FROM data where data.number in 
(
    SELECT number from data GROUP BY number HAVING COUNT(*)>1
)
LIMIT 1

这里没用,所以我被卡住了。欢迎各种建议。

为我工作的解决方案

Marc-B将帖子标记为stackoverflow.com/a/3312066/1528290的副本尝试了这种方法,它就像一个魅力。 我的疑问是:

alter ignore table data add unique i_number (number)

1 个答案:

答案 0 :(得分:0)

假设复制是在number列上完成的。试试这个:

DELETE FROM data 
 WHERE data.number NOT IN (SELECT * 
                    FROM (SELECT MAX(data.id)
                            FROM data n
                        GROUP BY data.number) x)

这将保留一条记录(编号最高)并删除表格中的其余记录。

修改

我刚刚查询了您的查询,它对我有用:

DELETE n1 FROM foobarred n1, foobarred n2 
WHERE n1.id > n2.id AND n1.number = n2.number;

SQLFIDDLE DEMO

我想你应该遵循Drew的评论:在mysql workbench上你必须关闭数据库,转到Edit / Preferences / SQL Editor /和@ bottom clear安全更新重新连接到服务器,选择db,然后解雇它在上面的牧场

Marc-B将帖子标记为stackoverflow.com/a/3312066/1528290的副本尝试了这种方法,它就像一个魅力。 我的疑问是:

alter ignore table data add unique i_number (number)