如何从MySQL表中删除重复的记录?

4

如果您能帮我解决这个 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命令中解决?谢谢。

你怎么知道什么是“第一次出现”?仅仅因为它在输出中是第一个,并不意味着它是最先输入到数据库中的...第二,这些数字从哪里来?它们也在表格中以某种列名的形式存在,还是只是为了说明而存在? - xQbert
你的表中是否有一个AUTO_INCREMENT字段,比如rowID或其他类似的字段? - gen_Eric
是的,这些数字是记录的ID。自增的INT类型。所谓“第一次”出现是指最低的ID。 - user490215
在删除它们之后,定义[UserID,LocationID]作为主键以避免将来出现相同的问题。 - Aris
1
@Aris:或者更确切地说是“唯一键”,“主键”应该是“ID”字段。 - gen_Eric
UserID 上创建一个 UNIQUE KEY - Kermit
2个回答

5

使用自连接来删除:

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 应替换为您的表格名称。


1
为了补充奥斯瓦尔德的回答,为了防止未来出现重复数据,你可以使用 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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接