繁体   English   中英

SQL查找所有相关条目

[英]SQL Finding all related entries

有了用户表,任何用户都可以与另一个用户建立友谊。 所以,

UserTable
-----------
User1
User2
User3


FriendshipTable
-----------
User1, User3
User2, User5
User3, User5
User5, User9

第1部分:我正在寻找一种方法来获取完整的朋友,朋友的朋友等。例如,User1将返回:User1,User5,User2,User9

第2部分:如果我能得到最大的人员网络的规模,这将是有用的,但不是必需的

或者,是否存在更好的方法来存储用户之间的连接,从而使提取所需的信息变得更加容易? 就像在建立友谊时建立和合并一系列的友谊团体一样?

我在这里找到了一些类似的帖子,但似乎都没有人跟随网络深入到第一层次。

我想那里有解决方案,但我什至不知道要搜索什么。

CTE是解决问题的方法(但是,如果要在朋友之间建立大量的隔离度,则需要谨慎使用MAXRECURSION)。 在您的情况下,UserTable实际上是不相关的。 您只关心关系表(FriendshipTable)。

CREATE TABLE #UserFriendship (User1 VARCHAR(20), User2 VARCHAR(20))

INSERT #UserFriendship VALUES ('A', 'B')
INSERT #UserFriendship VALUES ('B', 'C')


;WITH friends AS
(
    SELECT User1, User2 
    FROM #UserFriendship
    UNION ALL
    SELECT friends.User1, child.User2
    FROM friends
    JOIN #UserFriendship child ON
        friends.User2 = child.User1
)
SELECT * FROM friends

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM