2011-11-07 49 views
1

我需要幫助與SQL查詢選擇一行COLUMN2不等於COLUMN1

我有這個表

likes 
friend friend2 
     1   2 
     2   1 
     3   1 
     4   5 

,我需要選擇只有一雙是彼此喜歡的朋友們。

以我目前的選擇,我獲得這個

id  name   id  name 
1709 Cassandra 1689 Gabriel 
1689 Gabriel  1709 Cassandra 
1501 Jessica  1934 Kyle  
1934 Kyle   1501 Jessica 

,但預期的查詢結果是:

id  name  id  name 
1709 Cassandra 1689 Gabriel 
1501 Jessica  1934 Kyle  
+0

您使用的是哪個數據庫和版本? –

+0

必須是Transact SQL。 –

回答

1

如果您確信每對進入數據庫兩次(一次爲A,B,再次爲B,A),那麼你可以使用這個:

SELECT friend, friend2 
FROM yourtable 
WHERE friend < friend2 

如果可以有一些對是ONL Ÿ輸入一次,那麼你可以使用這個:

SELECT DISTINCT 
    LEAST(friend, friend2) AS friend, 
    GREATEST(friend, friend2) AS friend2 
FROM yourtable 
1

嘗試這樣:

select * 
from 
(
    select 
     case 
      when id1 > id2 then id2 
      when id1 < id2 then id1 
     end as Friend1, 
     case 
      when id1 < id2 then id2 
      when id1 > id2 then id1 
     end as Friend2 
    from TestMatching 
) a 
group by Friend1, Friend2 

這裏做的事情在這裏是它使用子查詢,子查詢只是一對夫婦的CASE塊訂購友誼。然後它會創建一個小組來創建友誼摘要。如果你想看看有什麼朋友是雙向的,那麼你會做這樣的事情:

select * 
from 
(
    select 
     case 
      when id1 > id2 then id2 
      when id1 < id2 then id1 
     end as Friend1, 
     case 
      when id1 < id2 then id2 
      when id1 > id2 then id1 
     end as Friend2 
    from TestMatching 
) a 
group by Friend1, Friend2 
having COUNT(*) > 1 -- this is the added clause to get consenting friends 

結果查詢是所有的朋友互相朋友。

相關問題