5
Users
-------------------------
id | ancestor_id | ....
-------------------------
1 | NULL | ....
2 | 1 | ....
3 | 1 | ....
4 | 3 | ....
5 | 3 | ....
一個表,將代表像
level 1 1
/\
level 2 2 3
/\
level 3 4 5
一棵樹,我想創建一個返回通過j
第四代給定用戶的後裔i
個程序:
CREATE PROCEDURE DescendantsLevel
@user_id INT,
@i INT,
@j INT
AS
....
如果@j
是NULL
,但是,它返回所有後代從代號@i
開始。
例子:
EXEC DescendantLevel @user_id=1,@i=2,@j=NULL
將返回
-------------------------
id | ancestor_id | ....
-------------------------
1 | NULL | ....
2 | 1 | ....
3 | 1 | ....
4 | 3 | ....
5 | 3 | ....
和
EXEC DescendantLevel @user_id=1,@i=1,@j=2
將返回
Users
-------------------------
id | ancestor_id | ....
-------------------------
1 | NULL | ....
2 | 1 | ....
3 | 1 | ....
個
幾個問題,我有:
- 是否有更好的價值比
NULL
來表示SQL「無限」的概念,一些? - 如何實現我描述的過程?
- 有沒有更好的設計數據庫的方法來簡化程序?
查找遞歸類。如果你使用這種設計,這將是解決這個問題的最簡單的方法。您也可以將嵌套集模型視爲鄰接列表的更好替代方案。 –
如果在你的第一個例子中'@ i'是2,那麼爲什麼返回id#1? –
爲什麼不添加關卡列?使查詢非常簡單。 – maraca