由父節點遞迴查詢所有子孫節點
WITH cte (id, parentid, text) AS (
-- 錨點:父節點
SELECT id, parentid, text FROM treeView WHERE parentid = 450
UNION ALL
-- 遞迴:加入子節點
SELECT t.id, t.parentid, t.text
FROM treeView AS t
INNER JOIN cte AS c ON t.parentid = c.id
)
SELECT id, parentid, text FROM cte
由子節點遞迴查詢所有祖先節點
WITH cte (id, parentid, text) AS (
-- 錨點:子節點
SELECT id, parentid, text FROM treeView WHERE id = 450
UNION ALL
-- 遞迴:加入父節點
SELECT t.id, t.parentid, t.text
FROM treeView AS t
INNER JOIN cte AS c ON t.id = c.parentid
)
SELECT id, parentid, text FROM cte
說明
WITH cte (...) AS (...) 定義通用資料表運算式。
- 第一個
SELECT 為錨點成員,第二個 SELECT 為遞迴成員,以 UNION ALL 連接。
- 遞迴成員透過自我聯結
cte 逐層展開。
- 適用於組織架構、選單樹、BOM 物料清單等階層結構查詢。
參考文件
MSDN - 使用通用資料表運算式 (CTE)