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