SQL递归查询

3
我有以下表格。
UserID  | User knows
--------------------
a       |          b
a       |          c
c       |          e
c       |          a
d       |          f
d       |          g

我想获取一个列表,以便知道哪些用户正在连接(也可以相互连接)。

例如,对于用户(a),列表应包含:b、c、e、a。

是否有一种在SQL中完成它的方法,还是我需要编写代码?


1
你使用哪个SQL数据库?能否编辑问题说明一下? - Preet Sangha
1
你使用哪个关系型数据库管理系统?版本是多少?许多数据库都具有允许递归发生的功能,但语法可能因产品(以及产品版本)而异。 - Damien_The_Unbeliever
1个回答

3
如果您正在使用SQL Server 2005或更新版本,请尝试以下操作:
WITH userCTE
AS ( 

    SELECT UserKnows
    FROM users
    WHERE UserId = 'a'
    UNION ALL
    SELECT UserKnows
    FROM users
    INNER JOIN userCTE 
     ON users.UserId= userCTE.UserKnows
    WHERE users.UserId != 'a'
)
SELECT *
FROM userCTE

你可以在这里看到它的实际应用:http://sqlfiddle.com/#!3/d41d8/1832/0


这也适用于PostgreSQL,Firebird(如果您添加了必需的递归关键字),Teradata和Oracle。 - user330315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接