这是朋友表

userid(int) | friendid(int) | confirmed(tiny int)
--------------------
1 | 2 | 1
2 | 1 | 1
1 | 3 | 1
3 | 1 | 1
1 | 5 | 0
2 | 4 | 1
4 | 2 | 1
4 | 1 | 1
1 | 4 | 1


我大约有20万行
我想删除重复的示例,如果userid = 1和friendid = 2,那么我不希望下一行userid = 2friendid = 1

我想要跨2列的唯一组合意味着如果1,2在那里,那么2,1不应该在那里并且应该删除。

然后,我可以像这样进行好友列表查询:

select * from friends where (userid=1 or friendid=1) and confirmed=1


我的问题:

如何删除重复的行?

也请给我查询以查找2个用户的共同朋友(他们的userid可以驻留在usersid列中,也可以驻留在friends表中的friendid中)。

最佳答案

将表本身与表连接起来,以相反的顺序查找具有相同用户对的行。

DELETE f1
FROM friends as f1
JOIN friends AS f2 ON f1.userid = f2.friendid AND f1.friendid = f2.userid
WHERE f1.friendid > f1.userid


WHERE子句确保我们只删除集合中两行之一。

关于mysql - mysql两列的独特组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46500998/

10-11 04:50