mysql两列唯一组合

时间:2017-09-30 08:28:27

标签: mysql

这是朋友表

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

我有大约200k行 我想删除重复示例如果userid = 1和friendid = 2那么我不想要下一行userid = 2 friendid = 1

我希望2列中的唯一组合意味着如果1,2那么那么2,1不应该存在并且应该被删除。

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

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

我的问题:

如何删除这些重复的行?

还请给我查询以查找2个用户的共同朋友(他们的用户ID可能位于朋友表中的userid列或friendid中)。

1 个答案:

答案 0 :(得分:1)

将表连接到自身,以相反的顺序查找具有相同用户对的行。

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子句确保我们只删除集合中的两行之一。