gpt4 book ai didi

sql - 对来自 Union 的 SQL 结果进行分组

转载 作者:行者123 更新时间:2023-12-01 08:39:16 26 4
gpt4 key购买 nike

我的数据库中有一个表用于用户互相关注。

表格如下:

UniqueID
FollowerID
FollowedUserID

FollowID 是关注其他人的用户的用户 ID。

FollowedUserID 是被 FollowID 用户关注的人的用户 ID。

我想从该表中检索基于单个用户的连接列表。我的查询应该返回当前用户关注或被关注的所有其他 UserID,并且没有重叠。

假设我们这里有一些条目:

FollowerID   FollowedUserID
1 2
1 3
4 1
2 1

这将表明用户 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

理论上我想将 FollowerID 和 FollowedUserID 组合在一起以保持它们的区别。

我对检索非不同结果然后创建唯一结果 php 端的数据集不感兴趣——查询应该只返回不同的值。

最佳答案

您很接近,但您必须颠倒 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;

请注意,如果您删除 WHERE 子句,您将获得所有人的所有连接。

关于sql - 对来自 Union 的 SQL 结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6025705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com