从两列中删除重复项

时间:2011-09-07 02:56:11

标签: mysql duplicates

早安stackoverflownians,

我有一个非常大的表,在两列上有重复项。意味着如果行a上的数字在第一行中的col1和col2中重复,我应该只保留第一行:

## table_1 
col1    col2

1           10
1           10
1           10
1           11
1           11
1           12
2           20
2           20
2           21
2           21


# should return this tbl without duplication

col1    col2

1           10
1           11
1           12
2           20
2           21

我之前的代码帐户只针对col1,我不知道如何在两个coluns上查询:

CREATE TABLE temp LIKE db.table_1;
INSERT INTO temp SELECT * FROM table_1 WHERE 1 GROUP BY col1;
DROP TABLE table_1;
ALTER TABLE temp RENAME table_1;

所以我想到了:

CREATE TABLE temp LIKE db.table_1;
INSERT INTO temp(col1,col2)
  SELECT DISTINCT col1,col2 FROM table_1;

then drop and rename..

但是我不确定它会起作用而MySQL往往会不稳定,如果需要太长时间我将不得不停止查询并且我再次崩溃服务器.. T.T

我们有200,000,000行,并且所有行至少有一个副本..

任何代码建议? :) 还..需要多长时间?几分钟或几小时?

2 个答案:

答案 0 :(得分:0)

distinct子句是要走的路,但要在很多记录上运行需要一段时间。我要添加一个自动绑定的ID列,并且是你的PK。然后,您可以在不会超时的阶段运行重复数据删除。

祝你好运和HTH - 乔

答案 1 :(得分:0)

你已经知道了很多方法:)

你也可以尝试这个

使用INSERT IGNORE而不是INSERT。如果记录没有复制现有记录,MySQL会像往常一样插入它。如果记录是重复的,则IGNORE关键字告诉MySQL以静默方式丢弃它而不会产生错误。

从现有表中读取,然后使用INSERT IGNORE在新表上写入。这样,您可以根据资源使用情况控制插入过程。

使用INSERT IGNORE并且确实存在密钥违规时,MySQL不会发出警告!!!