从联盟分组SQL结果

Att*_*cus 3 sql union group-by

嘿伙计们 - 我的数据库中有一张表供用户跟随彼此.

该表如下:UniqueID FollowerID FollowedUserID

FollowID是关注其他人的用户ID

FollowedUserID是FollowID用户所关注的人的UserID

我想根据一个用户从这个表中检索一个连接列表.我的查询应该返回当前用户正在关注或遵循的所有其他UserID,没有重叠.

所以说我们在这里有一些条目:

FollowerID   FollowedUserID
    1              2
    1              3
    4              1
    2              1
Run Code Online (Sandbox Code Playgroud)

这将表明,该用户1是以下用户2和3,因此,用户2和3正在随后用户1.在频谱的另一侧,它显示用户1后跟用户2和3.

我想要做的就是找出用户连接1了,所以查询应回报用户:2,3,4(用户1为下列用户2,3和正在遵循用户4)

如何从单个查询中实现此目的?

一个连接被认为要么被跟踪或者关注的人,所以可能出现一些重复的结果(如果两个用户都下海誓山盟)是可能的.我希望能够将这些结果分组,以便结果明确.

我尝试过类似的UNION查询:

SELECT FollowerID, FollowedUserID From Follows WHERE FollowerID = 1
UNION
SELECT FollowerID, FollowedUserID FROM Follows WHERE FollowedUserID = 1
Run Code Online (Sandbox Code Playgroud)

从理论上讲,我想将Group FollowerID和FollowedUserID放在一起,以保持它们的不同.

我不想检索一个非独特的结果,然后创建一个独特的结果php侧的数据集 - 查询应该只返回不同的值.

Jon*_*ler 8

你很接近,但你必须颠倒UNION的一个分支中列的顺序:

SELECT FollowerID AS reference_user, FollowedUserID AS connection
  FROM Follows
 WHERE FollowerID = 1
UNION
SELECT FollowedUserID AS reference_user, FollowerID AS connection
  FROM Follows
 WHERE FollowedUserID = 1
GROUP BY reference_user;
Run Code Online (Sandbox Code Playgroud)

请注意,如果删除WHERE子句,则会获得所有人的所有连接.