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命令中解决它?谢谢。

4

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

于 2013-02-21T20:01:02.393 回答
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;
于 2013-02-21T20:11:16.767 回答