我有一个包含2800万条记录的表,但现在它有5600万条记录,因为我认为load local infile
命令会忽略表中已有的行。不,我需要一种有效删除重复行的方法。解决这个问题的最佳方式是什么?
如果我不想触摸我的表,我可以通过以下语句选择唯一的行:
select distinct (l1.lat, l2.lon) from A, B;
答案 0 :(得分:5)
将原稿选入新的/临时表,删除5600万条记录,插入原件。
实施例: INSERT INTO new_fresh_table 选择a,b,c,d FROM table_with_dupes GROUP BY a,b,c,d
如果你以某种方式遗失了你的身份证(不确定PK的可能性如何),你需要在每一列上使用GROUP BY
。为元数据写一个SELECT
,为你写SELECT
。
答案 1 :(得分:0)
您没有指定记录如何被欺骗。是主键吗?名称?什么?
来自O'Reily的SQL Cookbook(强烈推荐,即使是SQL专业人士):
delete from dupes
where id not in ( select min(id) from dupes group by name )
答案 2 :(得分:0)
如果您无法触摸桌面,并且必须使用它,为什么不创建仅向您显示不同记录的视图?