如何从 MySQL 表中删除重复记录? [复制]

Posted

技术标签:

【中文标题】如何从 MySQL 表中删除重复记录? [复制]【英文标题】:How to remove duplicated records from a MySQL table? [duplicate] 【发布时间】:2013-02-07 07:07:04 【问题描述】:

如果您能帮我解决这个 sql 问题,我将不胜感激。

我有一个包含两列的表。在本例中将它们命名为 UserID 和 LocationID。

我想清理这个表,所以我想保留每对唯一的 UserID 和 LocationID 的第一次出现,并删除包含相同对的其他行。换句话说,我想知道他去过的每个用户的每个位置。如果他一次又一次地访问同一个地方并被记录,我想删除那些记录。例如,这是原始表:

ID UserID  LocationID
1. "user1" "location1"
2. "user1" "location2"
3. "user2" "location3"
4. "user1" "location1"
5. "user2" "location3"
6. "user2" "location3"

我想删除 4.、5. 和 6. 行。

是否有可能在一个mysql命令中解决它? 谢谢。

【问题讨论】:

你怎么知道什么是“第一次出现”,仅仅因为它在你的输出中是第一个并不一定意味着它是第一个进入数据库的......第二个数字来自哪里?它们在表中是否也带有某种列名或仅用于说明目的? 您的表是否有AUTO_INCREMENT 字段,例如rowID 之类的? 是的,数字是记录的ID。自动递增的 INT。 “第一次”出现是指最低的 id。 删除它们后,将 [UserID,LocationID] 定义为主键以避免将来出现同样的问题。 @Aris:或者更确切地说是UNIQUE KEYPRIMARY KEY 应该是ID 字段。 【参考方案1】:

使用自联接删除:

DELETE t2.*
FROM tablename AS t1
INNER JOIN tablename AS t2
    ON t1.UserID = t2.UserID
    AND t1.LocationID = t2.LocationID
WHERE t1.ID < t2.ID

tablename 应替换为您的表名。

【讨论】:

【参考方案2】:

要添加到 Oswald 的答案,以防止将来出现重复,您可以使用 INSERT...ON DUPLICATE UPDATE:

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

【讨论】:

以上是关于如何从 MySQL 表中删除重复记录? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从mysql中的表中删除重复的行

如何从 DbVisualizer 中删除表中的重复行

如何根据某个字段从数据库表中删除重复项

MySQL删除重复数据只保留一条

如何删除没有临时表的 MySQL 表中的所有重复记录

从 mysql 表中检索所有行,但首先将它们分组以删除重复