2017-08-06 16 views
1

我有一個表的朋友,它包含以下幾列: friend_id和friend_of(兩者都存儲唯一的用戶ID) 可以說表的朋友包含以下數據:SQL提取物在同一個表中的兩列獨特的數據

friend_id | friend_of 
------------------------- 
    123  |  456  
    456  |  789  
    456  |  123 

因此,這意味着:
用戶使用id = 123有一個朋友使用id = 456
用戶使用id = 456有兩個朋友使用IDS = 123(friend_1)& 789(friend_2)與
用戶id = 789有一個朋友,id = 456

我想編寫一個查詢,給定一個用戶ID顯示該用戶擁有的每個朋友(用他們的ID)。

例如:
如果與ID給定的用戶= 123的輸出將是用戶的id = 456
如果與ID給定的用戶= 789的輸出將是用戶的id = 456
如果與ID給定的用戶= 456輸出的用戶將是ID = 123和789的用戶

你能幫我解決我需要的查詢嗎?

回答

2
(select friend_id as all_friends from friends where friend_of=ID) 
uninon 
(select friend_of as all_friends from friends where friend_id=ID) 

我想你對只存在於其中一列的情況感興趣。以上查詢將解決這個問題。請注意,union在此處使用,而不是union all,因爲需要唯一值。

+0

謝謝你,先生,真棒,這正是我需要的! – Teo

0

選擇friend_id,friend_of 其中friend_id =「456」

只是改變ID來獲得期望輸出中

0

您可以使用查詢SELECT * FROM friends WHERE friend_id='456',應該讓所有的456的朋友然後做一個請使用外鍵friend_of加入您的「用戶」表。

編輯:我沒有意識到朋友是一種雙向關係。在這種情況下,首先使用UNION,其他一些回覆則會討論它。 :)

0

只需使用union

Declare @id int = 1; 
select f.friendof from 
#YourTableName as f where f.friendId = @id 
union 
select f.friendId from 
#YourTableName as f where f.friendof = @id 
相關問題