SQL Server 2005開始,我們可以直接通過CTE來支持遞歸查詢,CTE即公用表表達式 公用表表達式(CTE),是一個在查詢中定義的臨時命名結果集將在from子句中使用它。每個CTE僅被定義一次(但在其作用域內可以被引用任意次),並且在該查詢生存期間將一直生存。可以使用CTE來執行遞歸操作。
一、查詢樹狀結構某節點下的所有子節點
with cte_child(id,areaName,pid,level) as ( --起始條件 select id,areaName,pid,0 as level from erp_area where id = 1 -- 優先列出第一節點查詢條件 union all --遞歸條件 select a.id,a.areaName,a.pid,b.level+1 from erp_area a inner join cte_child b on ( a.pid=b.id) ) select * from cte_child
二、查詢樹狀結構某節點(44)的上級所有根節點
with cte_child(id,areaName,pid) as ( --起始條件 select id,areaName,pid from erp_area where id = 44 --列出子節點查詢條件 union all --遞歸條件 select a.id,a.areaName,a.pid from erp_area a inner join cte_child b --執行遞歸 on a.id=b.pid ) select * from cte_child;