我可以在表格中显示重复项
表名 reportingdetail 和列名 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);
但它只是 已删除 所有内容并保留了单个重复记录!
答案 0 :(得分:3)
在MySQL中删除重复项的最快方式(我知道)是添加索引。
例如,假设reportingdetailID
将成为该表的PK:
mysql> ALTER IGNORE TABLE reportingdetail
-> ADD PRIMARY KEY (reportingdetailID);
IGNORE是标准SQL的MySQL扩展。它控制ALTER的方式 如果新表中的唯一键上有重复项,则表可用 如果启用严格模式时发生警告。如果不是IGNORE 如果指定,则复制将被中止并在重复键错误时回滚 发生。如果指定了IGNORE,则只使用行的第一行 复制一个唯一的密钥。其他冲突的行将被删除。 不正确的值被截断为最接近的匹配可接受 值。
添加此索引将删除重复项并防止将来插入任何重复项。如果您不想要后一种行为,只需在创建索引后删除索引。
答案 1 :(得分:1)
以下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;
答案 2 :(得分:0)
这应该会给你重复的条目。
SELECT `ReportingDetailID`, COUNT(`ReportingDetailID`) AS Nummber_of_Occurrences FROM reportingdetail GROUP BY `ReportingDetailID` HAVING ( COUNT(`ReportingDetailID`) > 1 )