我有一张表,其中一个月的数据重复。所以大约有7个字段是相同的。暂时我将那个月(记录的2倍)移到了一个单独的表中。我如何摆脱重复?
从我有限的MySQL知识来看,除了手动之外我无法看到这样做的方法(但由于有125k记录,因此不实用。)
谢谢!
更新:并非所有字段都完全相同,因此在新表中的不同插入不起作用。我做的一件事是location_id捕获重复项。因此,订购时的位置如下:1,2,3,3,4,4,5,5,6,6,7,8,8 ....
所以我真正想要的是按location_id订购然后抓住该位置的第一条记录而忘记其余的记录。
答案 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 |
+-------------+--------------+----+