我有一个庞大的产品表,但有很多重复的条目。该表有超过10,000个条目,我想删除其中的重复条目,而无需手动查找和删除它。如果您能为我提供解决方案,请告知我们
答案 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)没有主键提交
CREATE TABLE temp_table AS SELECT * FROM foo GROUP BY字段或fileds;
DELETE FROM foo;
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
这将展示独特的产品。您可以将其转储到新表并删除现有表。