删除重复行MySQL
我一直试图从表中删除重复的行,但我所有的努力要么导致错误,要么在执行过程中卡住。 我的表有1680万条记录,包括150万条重复记录。 表结构如下所示删除重复行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
--------------------------------------
| 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上方启动它