SQL Server 2005開始,咱們能夠直接經過CTE來支持遞歸查詢,CTE即公用表表達式 公用表表達式(CTE),是一個在查詢中定義的臨時命名結果集將在from子句中使用它。每一個CTE僅被定義一次(但在其做用域內能夠被引用任意次),而且在該查詢生存期間將一直生存。能夠使用CTE來執行遞歸操做。spa
1、查詢樹狀結構某節點下的全部子節點code
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
2、查詢樹狀結構某節點(44)的上級全部根節點blog
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;