我一直在尝试从表中删除重复的行,但我的所有努力都会导致错误或在执行期间卡住。 我的表有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)
答案 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;
我想你应该遵循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)