公用表表示式 CTE 遞迴

2021-09-07 16:30:39 字數 1454 閱讀 2615

指定臨時命名的結果集,這些結果集稱為公用表表示式 (cte)。公用表表示式可以包括對自身的引用。這種表示式稱為遞迴公用表表示式

對於遞迴公用表示式來說,實現原理也是相同的,同樣需要在語句中定義兩部分:

在sql這兩部分通過union all連線結果集進行返回:

with cte as

( select id,pid,deptname,0 as lvl from department

where id = 2

union all

select d.id,d.pid,d.deptname,lvl+1 from cte c inner join department d

on c.id = d.pid

)select * from cte

使用cte準則建立cte時,需要注意的一些準則,詳見msnd列出的使用準則:

定義cte時最好加字首」;」

cte內部定義的列字段要保持一致

cte with之後第一句必須使用cte的select。即cte的生命週期只是在第一次使用之後就消亡。

sp中只能使用一次with語句。

定義多個cte時,只宣告乙個with關鍵字就行,比如

with test1

asselect * …………

test2 as

select * …………

通用表表示式(cte)是sql server的一項新功能。本質上cte是乙個臨時結果集,它僅僅存在於它發生的語句中。可以在select、insert、delete或create view語句中建立乙個cte。

舉例,新建乙個家庭關係表,以遞迴的方式儲存

關係圖:

表:

查詢:查詢出爸爸和爸爸的子孫

with cte as(

select id,parentid,name from family where name='爸爸'

union all

select family.id,family.parentid,family.name from family

join cte on family.parentid=cte.id

) select * from cte

查詢結果如下:

分類: 

資料庫

公用表表示式CTE

公用表表示式cte表面上和派生表非常相似,看起來只是語義上的區別。但和派生表比較起來,cte具有幾個優勢 第一,如果須要在乙個cte中引用另乙個cte,不需要像派生表那樣巢狀,相反,只要簡單地在同乙個with子句中定義多個cte,並用逗號把它們分隔開。每個cte可以引用在它前面定義的所有cte。而外...

公用表表示式 CTE

在編寫t sql 時,往往需要臨時儲存某些結果集。前面我們已經廣泛使用和介紹了兩種臨時儲存結果集的方法 臨時表和表變數。除此之外,還可以使用公用表表示式的方法。公用表表示式 common table expression 是sql server2005版本的引入的乙個特性。cte可以看組是乙個臨時的...

公用表表示式 CTE

在編寫t sql 時,往往需要臨時儲存某些結果集。前面我們已經廣泛使用和介紹了兩種臨時儲存結果集的方法 臨時表和表變數。除此之外,還可以使用公用表表示式的方法。公用表表示式 common table expression 是sql server2005版本的引入的乙個特性。cte可以看組是乙個臨時的...