2013-08-30 34 views
0

所以我有一個數據庫表,以保持友誼請求。我需要做的是找到丟失的對。這個例子是這樣:SQL查詢幫助查找丟失的對

一個合適的值是

 
Friend A > Friend B 
AND 
Friend B > Friend A 

我想要做的就是找到失蹤的夥伴關係。所以,如果你有Friend A > Friend B,而相反是缺少。我想列出失蹤的人。

我不能爲我的生命環繞我的頭,以實現這一目標的最佳途徑。有什麼建議麼?

+0

您現在正在查詢什麼? – trrrrrrm

+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演示

+0

你的答案總是完美的.. :) –

+0

@Sonali我不知道這一點,但謝謝:)有很多裝飾的專家在這裏... – peterm

+0

@BossRyan難道它有助於解決你的問題?你的問題需要更多幫助嗎? – peterm

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.*即可獲得無與倫比的朋友。