1

我有一个包含 2800 万条记录的表,但现在它有 5600 万条记录,因为我假设该load local infile命令会忽略表中已经存在的行。不,我需要一种有效删除重复行的方法。解决这个问题的最佳方法是什么?

如果我不想碰我的桌子,我可以通过这个语句选择唯一的行:

select distinct (l1.lat, l2.lon) from A, B;
4

3 回答 3

5

将原件选择到新/临时表中,删除 5600 万条记录,插入您的原件。

示例: INSERT INTO new_fresh_table SELECT a, b, c, d FROM table_with_dupes GROUP BY a, b, c, d

如果您以某种方式丢失了您的 ID(不确定如何使用 PK),您需要GROUP BY在每一列上使用。写一个SELECT反对元数据来SELECT为你写你的。

于 2012-06-06T18:35:23.310 回答
0

您没有指定记录是如何被欺骗的。是主键吗?姓名?什么?

来自 O'Reily 的SQL Cookbook(强烈推荐,即使对于 SQL 专业人士也是如此):

delete from dupes
  where id not in ( select min(id) from dupes group by name )
于 2012-06-06T18:40:07.620 回答
0

如果您不能触摸表格,而不得不使用它,为什么不创建一个只显示不同记录的视图呢?

于 2012-06-06T19:03:47.057 回答