SQL从同一个表

时间:2017-08-06 16:56:18

标签: sql multiple-columns

我有一个表朋友,其中包含以下列: friend_id和friend_of(两者都存储唯一的用户ID) 我们可以说表朋友包含以下数据:

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的用户,输出将是ids = 456的用户 如果给定id = 789的用户,则输出将是具有ids = 456的用户 如果给定id = 456的用户,则输出将是具有ids = 123和789

的用户

你能帮我解决一下我需要的问题吗?

4 个答案:

答案 0 :(得分:2)

doc.ready

我想你对id只存在于其中一列中的情况感兴趣。以上查询将解决此问题。请注意,此处使用(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,因为需要唯一值。

答案 1 :(得分:0)

选择friend_id,friend_of 其中friend_id ='456'

只需更改ID即可获得欲望输出

答案 2 :(得分:0)

您可以使用查询SELECT * FROM friends WHERE friend_id='456',该查询应该获得456的所有朋友。然后使用外键friend_of在您的“用户”表上进行联接。

编辑:我没有意识到朋友是双向关系。在这种情况下,首先使用UNION,其他一些回复谈论它。 :)

答案 3 :(得分: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