我有如下表SQL選擇遞歸
UserID | User knows
--------------------
a | b
a | c
c | e
c | a
d | f
d | g
我想,以瞭解哪些用戶連接(也可以通過對方),以獲得一個列表。
e.g用戶(一)列表應包含:B,C,E,A
有沒有辦法做到這一點在SQL或我的代碼的東西嗎?
我有如下表SQL選擇遞歸
UserID | User knows
--------------------
a | b
a | c
c | e
c | a
d | f
d | g
我想,以瞭解哪些用戶連接(也可以通過對方),以獲得一個列表。
e.g用戶(一)列表應包含: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
這也適用於PostgreSQL,Firebird(如果添加強制性遞歸關鍵字),Teradata和Oracle。 –
我得到「不明確的列名'userknows'」爲錯誤 –
不管問題是不是工作;-) THX –
哪些SQL數據庫您使用的?你可以編輯這個問題來表明它請 –
你正在使用哪種RDBMS?和版本?許多功能允許發生遞歸,但語法可能因產品(以及產品版本之間)而異 –