所以我有一个保存友谊请求的数据库表。我需要做的是找到丢失的对。这个例子是这样的:
一个适当的价值是
朋友 A > 朋友 B 和 朋友 B > 朋友 A
我想做的是找到缺失的伙伴关系。因此,如果您有Friend A > Friend B
,并且缺少相反的内容。我想列出缺少的那些。
我一辈子都无法用最好的方法来完成这一点。有什么建议么?
你可以这样做
SELECT MIN(user_id) user_id,
MIN(friend_id) friend_id
FROM Table1
GROUP BY LEAST(user_id, friend_id),
GREATEST(user_id, friend_id)
HAVING COUNT(*) = 1
给定样本数据
| USER_ID | FRIEND_ID | |---------|------------| | 1 | 2 | | 2 | 1 | | 1 | 3 | | 2 | 4 | | 5 | 6 | | 6 | 5 |
查询的输出
| USER_ID | FRIEND_ID | |---------|------------| | 1 | 3 | | 2 | 4 |
这是SQLFiddle演示
您可以使用以下not exists
子句执行此操作:
select f.B as A, f.A as B
from friends f
where not exists (select 1
from friends f2
where f2.A = f.B and f2.B = f.A
);
该select
条款为您提供了缺少的条款。就个人而言,我只是select f.*
为了得到无与伦比的朋友。