我有下表

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


我想获得一个列表,以便知道哪些用户已连接(也可以通过其他用户)。

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

有没有一种方法可以在sql中执行,还是必须编写一些代码?

最佳答案

如果您使用的是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

10-05 18:19