Sir*_*eno 5 sql database sql-server tree
构建表示树的表的最佳方法是什么?我想实现一个适用于大数据的选择,插入,更新和删除.例如,select必须支持"Expand ALL" - 获取给定节点的所有子节点(以及子节点).
用CTE
的.
给定树状表结构:
id parent name
1 0 Electronics
2 1 TV
3 1 Hi-Fi
4 2 LCD
5 2 Plasma
6 3 Amplifiers
7 3 Speakers
Run Code Online (Sandbox Code Playgroud)
,此查询将返回id
,parent
深度级别,按树排序:
WITH v (id, parent, level) AS
(
SELECT id, parent, 1
FROM table
WHERE parent = 0
UNION ALL
SELECT id, parent, v.level + 1
FROM v
JOIN table t
ON t.parent = v.id
)
SELECT *
FROM v
id parent name
1 0 Electronics
2 1 TV
4 2 LCD
5 2 Plasma
3 1 Hi-Fi
6 3 Amplifiers
7 3 Speakers
Run Code Online (Sandbox Code Playgroud)
更换parent = 0
用parent = @parent
得到的只有一棵树的一个分支.
如果有索引table (parent)
,则此查询将有效地处理非常大的表,因为它将递归地用于 INDEX LOOKUP
查找每个父项的所有chilrden.
要更新某个分支,请发出:
WITH v (id, parent, level) AS
(
SELECT id, parent, 1
FROM table
WHERE parent = 0
UNION ALL
SELECT id, parent, v.level + 1
FROM v
JOIN table t
ON t.parent = v.id
)
UPDATE table t
SET column = newvalue
WHERE t.id IN
(
SELECT id
FROM v
)
Run Code Online (Sandbox Code Playgroud)
哪个@parent
是分支的根.