我有一个表朋友,其中包含以下列: 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
你能帮我解决一下我需要的问题吗?
答案 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
在您的“用户”表上进行联接。
答案 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