[英]Mysql delete duplicates
我能够在表格中显示重复项
表名reportdetail和列名ReportingDetailID
SELECT DISTINCT ReportingDetailID from reportingdetail group by ReportingDetailID HAVING count(ReportingDetailID) > 1;
+-------------------+
| ReportingDetailID |
+-------------------+
| 664602311 |
+-------------------+
1 row in set (2.81 sec)
任何人都知道如何删除重复项并保留一条记录?
我厌倦了以下
SELECT * FROM reportingdetail USING reportingdetail, reportingdetail AS vtable WHERE (reportingdetailID > vtable.id) AND (reportingdetail.reportingdetailID=reportingdetailID);
但它只删除了所有内容并保留了单个重复记录!
在MySQL中删除重复项的最快方法(我知道)是添加一个索引。
例如,假设reportingdetailID
将成为该表的PK:
mysql> ALTER IGNORE TABLE reportingdetail
-> ADD PRIMARY KEY (reportingdetailID);
从文档 :
IGNORE是标准SQL的MySQL扩展。 如果新表中的唯一键上存在重复项,或者启用了严格模式时出现警告,它将控制ALTER TABLE的工作方式。 如果未指定IGNORE,则复制将中止并在发生重复键错误时回滚。 如果指定了IGNORE,则只使用第一行在唯一键上具有重复项的行。 其他冲突的行将被删除。 不正确的值将截断为最接近的匹配可接受值。
添加此索引将删除重复项并防止将来插入任何重复项。 如果您不想要后一种行为,只需在创建索引后删除它。
以下MySQL命令将创建一个临时表,并使用一个列名称(具有重复项的列)将所有列GROUPED填充它,并按主键升序对它们进行排序。 第二个命令从临时表创建一个真实的表。 第三个命令删除正在使用的表,最后一个命令将第二个临时表重命名为当前正在使用的表名。
这是一个非常快速的解决方案。 以下是四个命令:
CREATE TEMPORARY TABLE videos_temp AS SELECT * FROM videos GROUP by
title ORDER BY videoid ASC;
CREATE TABLE videos_temp2 AS SELECT * FROM videos_temp;
DROP TABLE videos;
ALTER TABLE videos_temp2 RENAME videos;
这应该给你重复的条目。
SELECT `ReportingDetailID`, COUNT(`ReportingDetailID`) AS Nummber_of_Occurrences FROM reportingdetail GROUP BY `ReportingDetailID` HAVING ( COUNT(`ReportingDetailID`) > 1 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.