2013-02-21 80 views
2

如果你能帮我解决这个sql问题,我将不胜感激。如何从MySQL表中删除重复记录?

我有一个包含两列的表。在这个例子中,将它们命名为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命令中解决它? 谢谢。

+0

选择不同* – scott 2013-02-21 19:58:36

+0

你怎么知道什么是“第一次出现”只是因为它首先在你的输出中并不一定意味着它是第一次进入数据库...第二名数字来自哪里?他们是否也有某种列名,或者仅出于说明目的? – xQbert 2013-02-21 20:00:55

+0

你的表是否有'AUTO_INCREMENT'字段,比如'rowID'或者其他? – 2013-02-21 20:01:30

回答

3

删除使用自联接:

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;