SQL选择位置
我有一张这样的桌子SQL选择位置,sql,database,Sql,Database,我有一张这样的桌子 UserFriends Id UserId RequestId Status 1 1 2 1 2 1 3 1 3 1 4 0 4 3 2 1 5 3
UserFriends
Id UserId RequestId Status
1 1 2 1
2 1 3 1
3 1 4 0
4 3 2 1
5 3 4 1
基本上,结构是如果状态为0,请求不被接受,否则1被接受,他们是朋友
我正在尝试做得到用户2的朋友我该怎么做
重要编辑:
我正在尝试获取用户3的朋友。你知道如果用户1添加了用户3他们是朋友,用户3添加了2和4他们也是朋友(用户3朋友必须返回1、2和4这是基本的解释)如果我读得正确,友谊的特征是用户邀请另一个用户或该用户被其他用户邀请,并且在这两种情况下请求都被接受。如果是这样,那么下面的
UNION
查询应该给出预期的结果:
SELECT RequestId
FROM UserFriends
WHERE UserId = 3 AND Status = 1
UNION
SELECT UserId
FROM UserFriends
WHERE RequestId = 3 AND Status = 1
我在这里使用UNION
,因为如果一对用户相互邀请,或者如果一个邀请被发送了不止一次,那么一个给定的用户可能会多次作为朋友出现。我假设您不想将同一用户作为朋友报告多次
输出:
此处演示:
如果我读对了,友谊的特征是一个用户邀请另一个用户,或者该用户被其他用户邀请,并且在这两种情况下请求都被接受。如果是这样,那么下面的
UNION
查询应该给出预期的结果:
SELECT RequestId
FROM UserFriends
WHERE UserId = 3 AND Status = 1
UNION
SELECT UserId
FROM UserFriends
WHERE RequestId = 3 AND Status = 1
我在这里使用UNION
,因为如果一对用户相互邀请,或者如果一个邀请被发送了不止一次,那么一个给定的用户可能会多次作为朋友出现。我假设您不想将同一用户作为朋友报告多次
输出:
此处演示:
是发出请求的用户的
RequestId
吗?因为如果是这样,他已经有两个朋友了(Id=1
和Id=4
)我的问题是这里的用户1在第一行添加了用户2和状态1,但我不想再添加这个记录,就像用户2添加了用户1和状态1用户向请求者发出请求一样。你可以做一些案例陈述,从中得到UserId
和RequestId
中的任何一个不是用户2。但是我更希望有一个包含UserId
和Friends
的表。RequestId
是发出请求的用户的UserId
?因为如果是这样,他已经有两个朋友了(Id=1
和Id=4
)我的问题是这里的用户1在第一行添加了用户2和状态1,但我不想再添加这个记录,就像用户2添加了用户1和状态1用户向请求者发出请求一样。你可以做一些案例陈述,从中得到UserId
和RequestId
中的任何一个不是用户2。但是我更希望有一个带有UserId
和Friends
的表。我大概一分钟前就这样做了:)。无论如何,这是正确的答案,谢谢你的努力和时间:)我是这样做的,也许一分钟前:)。无论如何,这是正确的答案,谢谢你的努力和时间:)