id parent_id
--------------
a_1 NULL
a_2 NULL
b_1 a_1
c_1 b_1
d_1 c_1
現在,我有ID:d_1
我怎樣才能得到a_1
,b_1
,c_1
在一個SQL查詢? (d_1
的祖先ID)?
id parent_id
--------------
a_1 NULL
a_2 NULL
b_1 a_1
c_1 b_1
d_1 c_1
現在,我有ID:d_1
我怎樣才能得到a_1
,b_1
,c_1
在一個SQL查詢? (d_1
的祖先ID)?
我真的不認爲你可以做到這一點在一個簡單的SQL語句中,這是SQL語言的一個基本限制。
Here是,它大概你想要什麼(對於SQL Server)十惡不赦的存儲過程。所以你需要做這樣的事情。
SELECT c.id, b.id, a.id
FROM T
INNER JOIN T AS c on T.parent_id=c.id
INNER JOIN T AS b ON c.parent_id = b.id
INNER JOIN T as a ON b.parent_id = a.id
假設你的表名爲T.但未經測試。不知道如果d沒有三個父母會發生什麼,可能你沒有得到一個東西,可能會嘗試LEFT JOIN爲這些情況獲得偉大的父母的NULL值。此外,最後一個JOIN並不是真的必要的,因爲你可以簡單地選擇b.parent_id而不是a.id,但是,你知道,只是爲了開車回家的模式;)
你的意思是D_1的祖先IDS。 d_1的父母標識是c_1,但您需要d_1的所有祖先。 (你可能想編輯你的問題來澄清這一點)。這是SQL不能很好地執行(處理任意級別的層次結構),儘管某個專家可能有一個解決方案。 – 2011-12-26 18:32:25
你有固定的最大遞歸深度嗎? – 2011-12-26 18:32:54
@AlbinSunnanbo好問題,我只是帶着問題的字面意思。我想用LEFT JOIN和[最大遞歸深度]連接數可能有足夠的靈活性。對於父母的未定義的數字......我真的很想看到有人怎麼會爲 – Nicolas78 2011-12-26 18:36:25