Sql Server 使用CTE實現遞迴查詢

2022-04-03 03:03:28 字數 1346 閱讀 9363

遞迴cte是sql server 2005中重要的增強之一。一般我們在處理樹,圖和層次結構的問題時需要用到遞迴查詢。

cte的語法如下

1with

cte as2

(3select

empid, reportto, fname 

from

employ 

where

empid=1

4union

all5

select

emp.empid, emp.reportto, emp.fname 

from

cte 

join

employ 

asemp 

oncte.empid

=emp.reportto6)

遞迴cte最少包含兩個查詢(也被稱為成員)。第乙個查詢為定點成員,定點成員只是乙個返回有效表的查詢,用於遞迴的基礎或定位點。第二個查詢被稱為遞迴成員,使該查詢稱為遞迴成員的是對cte名稱的遞迴引用是觸發。在邏輯上可以將cte名稱的內部應用理解為前乙個查詢的結果集。

遞迴查詢沒有顯式的遞迴終止條件,只有當第二個遞迴查詢返回空結果集或是超出了遞迴次數的最大限制時才停止遞迴。是指遞迴次數上限的方法是使用maxrecurion。

1use

adventureworks;2go

3--creates an infinite loop

4with

cte (employeeid, managerid, title) as5

(6select

employeeid, managerid, title

7from

humanresources.employee

8where

managerid 

isnot

null

9union

all10

select

cte.employeeid, cte.managerid, cte.title

11from

cte 

12join

humanresources.employee 

ase 

13on

cte.managerid 

=e.employeeid14)

15--

uses maxrecursion to limit the recursive levels to 2

16select

employeeid, managerid, title

17from

cte18

option

(maxrecursion 2);

19go

原 SQL Server中使用CTE遞迴查詢

目錄 背景 問題思路 ctecte遞迴查詢 結束語參考資料 怎麼遍歷出乙個父級選單下所有子選單?思路 定義語法結構 使用cte準則 示例 定義 cte common table expressions 是從sql server 2005以後版本才有的。指定的臨時命名結果集,這些結果集稱為cte。與派...

sql server利用cte遞迴查詢

with cte id,name,parent id as select id,name,parent id from sc district where name 巴中市 union all select sd.id,sd.name,sd.parent id from sc district sd...

Sqlserver普通的CTE遞迴示例

建立表 declare t table id int pid int name varchar 6 insert into t select 1,0,上衣 union all select 2,0,鞋子 union all select 3,0,褲子 union all select 4,1,毛衣 ...