DB中的重复条目

时间:2011-05-11 20:38:49

标签: mysql

我有一个庞大的产品表,但有很多重复的条目。该表有超过10,000个条目,我想删除其中的重复条目,而无需手动查找和删除它。如果您能为我提供解决方案,请告知我们

5 个答案:

答案 0 :(得分:3)

您可以使用SELECT DISTINCT INTO TempTable,删除原始表,然后重命名临时表。

您还应该添加主键和唯一键以避免将来出现此类事件。

答案 1 :(得分:3)

对于完整行重复,请尝试此操作。

select distinct * into mytable_tmp from mytable
drop table mytable
alter table mytable_tmp rename mytable

答案 2 :(得分:2)

似乎以下陈述将帮助您解决您的要求。

如果表(foo)具有主键字段

第一步

在临时表中存储键值,在group by子句中给出您的唯一条件 如果要删除重复的电子邮件ID,请在group by子句中提供电子邮件ID,并在其中输入主键名称 select子句,如min(primarykey)或max(primarykey)

CREATE TEMPORARY TABLE temptable AS SELECT min(primarykey)FROM foo GROUP BY uniquefields;

第二步

调用下面的delete语句并给出表名和主键列

DELETE FROM foo WHERE primarykey NOT IN(SELECT * FROM temptable);

执行查询分析器或数据库工具中的组合查询。

如果表(foo)没有主键提交

第1步

CREATE TABLE temp_table AS SELECT * FROM foo GROUP BY字段或fileds;

第2步

DELETE FROM foo;

第3步

INSERT INTO foo select * from temp_table;

答案 3 :(得分:1)

有不同的解决方案可以删除重复的行,它完全取决于您的场景,以便使用它们中的一个。最简单的方法是更改​​表,在“产品名称”字段上创建唯一索引:

alter ignore table products add unique index `unique_index` (product_name);

您可以在删除所有重复行后删除索引:

alter table products drop index `unique_index`;

如果这样可以解决问题,请告诉我。如果没有,我可以为您提供替代解决方案。

答案 4 :(得分:1)

您可以向组中添加多个列。即。

SELECT * from tableName GROUP BY prod_name HAVING count(prod_name) > 1

这将展示独特的产品。您可以将其转储到新表并删除现有表。