2012-06-13 114 views
3

我有如下表SQL選擇遞歸

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

我想,以瞭解哪些用戶連接(也可以通過對方),以獲得一個列表。

e.g用戶(一)列表應包含:B,C,E,A

有沒有辦法做到這一點在SQL或我的代碼的東西嗎?

+1

哪些SQL數據庫您使用的?你可以編輯這個問題來表明它請 –

+1

你正在使用哪種RDBMS?和版本?許多功能允許發生遞歸,但語法可能因產品(以及產品版本之間)而異 –

回答

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

+0

這也適用於PostgreSQL,Firebird(如果添加強制性遞歸關鍵字),Teradata和Oracle。 –

+0

我得到「不明確的列名'userknows'」爲錯誤 –

+0

不管問題是不是工作;-) THX –