.net SQL查找所有相关条目
拥有一个用户表,任何用户都可以与其他用户建立友谊。所以.net SQL查找所有相关条目,.net,sql,sql-server-2008,many-to-many,data-modeling,.net,Sql,Sql Server 2008,Many To Many,Data Modeling,拥有一个用户表,任何用户都可以与其他用户建立友谊。所以 UserTable ----------- User1 User2 User3 FriendshipTable ----------- User1, User3 User2, User5 User3, User5 User5, User9 第1部分:我正在寻找一种获取全套朋友、朋友的朋友等的方法。例如,User1将返回:User1、User5、User2、User9 第二部分:如果我能得到最大的人际网络的规模,这将是有用的,但不是必要
UserTable
-----------
User1
User2
User3
FriendshipTable
-----------
User1, User3
User2, User5
User3, User5
User5, User9
第1部分:我正在寻找一种获取全套朋友、朋友的朋友等的方法。例如,User1将返回:User1、User5、User2、User9
第二部分:如果我能得到最大的人际网络的规模,这将是有用的,但不是必要的
或者,是否有更好的方法来存储用户之间的连接,从而更容易获取我需要的信息?比如在建立友谊的同时建立和合并一个友谊小组的列表
我在这里找到了一些类似的帖子,但似乎没有一篇文章能超越网络的第一个深度
我想那里有解决方案,但我甚至不知道该搜索什么。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
MSSQL 2008和.NET解决方案不必只有SQL,我想我需要一些临时表和递归。如果是SQL 2K8,您可以使用递归CTE并指定MAXRECUSION选项,无论是0无限还是某些已知限制。FoF可以非常快速地扩展,并在关系图中包含循环。我也在考虑CTE。到目前为止,我发现的CTE递归示例都在同一个表中的记录之间使用父/子层次关系。我还没有遇到过一个演示如何使用第二个关系表的例子,我可能需要使用第二个关系表。