SQL查询帮助查找丢失的对

时间:2013-08-30 03:09:04

标签: mysql sql

所以我有一个数据库表来保存友谊请求。我需要做的是找到丢失的配对。例子如下:

正确的值是

Friend A > Friend B 
AND
Friend B > Friend A  

我想要做的是找到失踪的伙伴关系。所以,如果你有Friend A > Friend B,那么相反的情况就会丢失。我想列出缺少的那些。

我不能为我的生活缠绕我的头脑来实现这一目标的最好方法。有什么建议吗?

2 个答案:

答案 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.*来获得无与伦比的朋友。