我有下表
UserID | User knows
--------------------
a | b
a | c
c | e
c | a
d | f
d | g
我想获得一个列表,以便了解哪些用户已连接(也是通过彼此)。
例如对于用户(a),列表应包含:b,c,e,a
有没有办法在sql中执行此操作,还是必须编写代码?
答案 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