删除重复的MySQL记录?

时间:2010-07-21 16:39:23

标签: mysql

我有一张表,其中一个月的数据重复。所以大约有7个字段是相同的。暂时我将那个月(记录的2倍)移到了一个单独的表中。我如何摆脱重复?

从我有限的MySQL知识来看,除了手动之外我无法看到这样做的方法(但由于有125k记录,因此不实用。)

谢谢!

更新:并非所有字段都完全相同,因此在新表中的不同插入不起作用。我做的一件事是location_id捕获重复项。因此,订购时的位置如下:1,2,3,3,4,4,5,5,6,6,7,8,8 ....

所以我真正想要的是按location_id订购然后抓住该位置的第一条记录而忘记其余的记录。

3 个答案:

答案 0 :(得分:2)

第一

备份

第二

创建temp_table并将所有数据插入temp_table并进行分组

CREATE TABLE temp_table (column1, column2, ...., column7) 
    SELECT column1, column2, ...., column7 FROM temp_table 
    GROUP BY column1 /* which ever column you want it the unique or distinct way */
        /* If you have any condition , you can a syntax here with WHERE clause */

第三

如果您认为,您获得了所需的结果,则可以将temp_table重命名为新表 并删除或重命名旧表

希望你,可能会得到一些想法,也可能不会。

答案 1 :(得分:1)

创建一个新表,只需将DISTINCT选中它们到新表中

未经测试但应如下所示:

INSERT INTO new_table(field1, field2, field3) SELECT DISTINCT field1, field2, field3 FROM old_table

请参阅文档中的INSERT...SELECT页面

答案 2 :(得分:0)

您可以向表格添加自动增量主键(正如另一个已删除的答案所示)。

ALTER TABLE location ADD COLUMN id INT AUTO_INCREMENT, ADD PRIMARY KEY (id);

SELECT * FROM location;

+-------------+--------------+----+
| location_id | othercolumns | id |
+-------------+--------------+----+
|           1 | text         |  1 |
|           2 | text         |  2 |
|           3 | text         |  3 |
|           3 | text         |  4 |
|           4 | text         |  5 |
|           4 | text         |  6 |
|           5 | text         |  7 |
|           5 | text         |  8 |
|           6 | text         |  9 |
|           6 | text         | 10 |
|           7 | text         | 11 |
|           8 | text         | 12 |
|           8 | text         | 13 |
+-------------+--------------+----+

然后您可以使用MySQL的多表DELETE语法来确保只删除具有匹配的location_id和更高ID的行。

DELETE l2
FROM location l1
JOIN location l2 ON l1.id < l2.id AND l1.location_id = l2.location_id;

SELECT * FROM location;

+-------------+--------------+----+
| location_id | othercolumns | id |
+-------------+--------------+----+
|           1 | text         |  1 |
|           2 | text         |  2 |
|           3 | text         |  3 |
|           4 | text         |  5 |
|           5 | text         |  7 |
|           6 | text         |  9 |
|           7 | text         | 11 |
|           8 | text         | 12 |
+-------------+--------------+----+