指定臨時命名的結果集,這些結果集稱為公用表表示式 (cte)。公用表表示式可以包括對自身的引用。這種表示式稱為遞迴公用表表示式。
對於遞迴公用表示式來說,實現原理也是相同的,同樣需要在語句中定義兩部分:
在sql這兩部分通過union all連線結果集進行返回:
with cte as使用cte準則建立cte時,需要注意的一些準則,詳見msnd列出的使用準則:( 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內部定義的列字段要保持一致
cte with之後第一句必須使用cte的select。即cte的生命週期只是在第一次使用之後就消亡。
sp中只能使用一次with語句。
定義多個cte時,只宣告乙個with關鍵字就行,比如
with test1通用表表示式(cte)是sql server的一項新功能。本質上cte是乙個臨時結果集,它僅僅存在於它發生的語句中。可以在select、insert、delete或create view語句中建立乙個cte。asselect * …………
test2 as
select * …………
舉例,新建乙個家庭關係表,以遞迴的方式儲存
關係圖:
表:
查詢:查詢出爸爸和爸爸的子孫
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可以看組是乙個臨時的...