删除重复行MySQL

删除重复行MySQL,mysql,duplicates,mysql-workbench,duplicate-removal,navicat,Mysql,Duplicates,Mysql Workbench,Duplicate Removal,Navicat,我一直试图从表中删除重复的行,但我所有的努力要么导致错误,要么在执行过程中卡住。 我的表有1680万条记录,包括150万条重复记录。 表结构如下所示 -------------------------------------- | id | number | city | region | site | -------------------------------------- | 1 | 12345 | abc | xyz | 321 | | 2 | 67890 | def

我一直试图从表中删除重复的行,但我所有的努力要么导致错误,要么在执行过程中卡住。 我的表有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  |
--------------------------------------
我曾尝试使用stack overflow的答案中建议的一些方法,但找不到适合我的解决方案

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)
alter ignore table data add unique i_number (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;


我想你们应该遵循Drew的评论:在mysql工作台上,你们必须关闭数据库,进入Edit/Preferences/SQL Editor/和@bottom clear Safe Updates重新连接到服务器,选择db,然后在pastie上面启动它

Marc-B将该帖子标记为stackoverflow.com/a/3312066/1528290的副本,并尝试了这种方法,效果非常好。 我的问题是:

alter ignore table data add unique i_number (number)
alter ignore table data add unique i_number (number)

@B-阿巴斯。。是否要删除所有出现的重复行?或者您希望为每组重复行保留一行吗?为什么
从数据n1中删除n1,其中n1.id>n2.id和n1.number=n2.number
不起作用?给出了什么错误?您实际上还没有定义什么是重复记录。在任何记录中都有相同的号码?城市、地区、站点组合的数字相同?@DfrDkn我想为每个重复项保留一行o是的,我完全忘了写这个,我尝试了,它删除了表中的所有记录。不知道为什么。重复的行是彼此的精确副本,但ID是主要的Key@B-阿巴斯:-更新了我的答案。您现在可以试试吗?检查一下:在mysql workbench上,您必须关闭数据库,转到Edit/Preferences/SQL Editor/和@bottom clear Safe Updates重新连接到服务器,选择db,然后在pastie上方启动它