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

时间:2013-02-21 19:56:14

标签: mysql

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

2 个答案:

答案 0 :(得分:4)

使用自我加入删除:

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 :(得分:1)

要添加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;