如何从两个用户之间的连接表中检索连接用户的集群?

时间:2010-10-29 11:06:04

标签: sql algorithm graph networking

该表由连接在一起的成对用户组成。以下是一个假设的例子:

user1, user2
a, b
a, c
c, a
c, d
d, e
a, e
j, n
g, n
f, n

通过从表(user1或user2)中随机选择用户,我想检索所选用户所属的整个连接群集。例如,如果选择了用户d,则查询(或算法)应返回连接

a, b
a, c
c, a
c, d
d, e
a, e

有谁知道如何形成查询语句或创建算法来检索连接群集?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用递归CTE,如下所示:

with combinedusers as 
(select user1 userX, user2 userY from usertable union
 select user2 userX, user1 userY from usertable)
, relatedusers as 
(select c.userX, 
        c.userY, 
        convert(varchar(max),'\' + c.userX + '\' + c.userY + '\') hierarchy 
        from combinedusers c where userX = 'd' 
 union all
 select c.userX, 
        c.userY, 
        convert(varchar(max),r.hierarchy  + c.userY + '\') hierarchy 
        from combinedusers c 
        join relatedusers r 
        on c.userX = r.userY and charindex('\' + c.userY + '\',r.hierarchy)=0)
select * from
(select userX, userY from relatedusers union 
 select userY, userX from relatedusers) r where userX < userY

答案 1 :(得分:1)

在SQL中建模树和更一般的图表很棘手,但可以完成。

你可以谷歌搜索“part explosionions SQL”关键字,你会发现很多参考资料。

您可能会在MySql here中找到一种模拟非常类似问题的方法。