SQL递归选择

时间:2012-06-13 06:20:34

标签: sql sql-server-2008

我有下表

UserID  | User knows
--------------------
a       |          b
a       |          c
c       |          e
c       |          a
d       |          f
d       |          g

我想获得一个列表,以便了解哪些用户已连接(也是通过彼此)。

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

有没有办法在sql中执行此操作,还是必须编写代码?

1 个答案:

答案 0 :(得分: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