所以我有一个数据库表来保存友谊请求。我需要做的是找到丢失的配对。例子如下:
正确的值是
Friend A > Friend B AND Friend B > Friend A
我想要做的是找到失踪的伙伴关系。所以,如果你有Friend A > Friend B
,那么相反的情况就会丢失。我想列出缺少的那些。
我不能为我的生活缠绕我的头脑来实现这一目标的最好方法。有什么建议吗?
答案 0 :(得分:3)
你可以这样做
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 演示
答案 1 :(得分:0)
您可以使用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.*
来获得无与伦比的朋友。