with as 的遞迴使用方法

2021-08-17 15:19:37 字數 2072 閱讀 6336

公用表表示式(common table expression)是sql server 中的乙個特性.cte可以看作是乙個臨時的結果集,可以在接下來的乙個select,insert,update,delete,merge語句中被多次引用。使用公用表示式可以讓語句更加清晰簡練.

按照是否遞迴,可以將公用表(cte)表示式分為遞迴公用表表示式和非遞迴公用表表示式.

--以城市,省份,地區為資料  

1.1舉例:以西安基礎查詢所有父級結構

with cte_temp   --公用表表示式(common table expression)

as(select * from provincecity_test where value like '%西安%'

union all

select a.* from provincecity_test a

inner join cte_temp b on a.id = b.parentid --父子級關係,遞迴,遞迴部分不允許使用外部聯接(不允許使用left join等)

) select * from cte_temp -- cte後面必須直接跟使用cte的sql語句(如select、insert、update等),否則,cte將失效。

1.2 cte失效問題

with cte_temp   --公用表表示式(common table expression)

as(select * from provincecity_test where value like '%西安%'

union all

select a.* from provincecity_test a

inner join cte_temp b on a.id = b.parentid --父子級關係,遞迴,遞迴部分不允許使用外部聯接(不允許使用left join等)

) -- cte後面必須直接跟使用cte的sql語句(如select、insert、update等),否則,cte將失效。

select * from provincecity_test

select * from cte_temp -- cte_temp 失效,報錯

1.3遞迴次數(1)option 子句中的乙個 0 到 32,767 之間的值來限制特定語句所允許的遞迴級數,以防止出現無限迴圈。

(2)sql server伺服器範圍內的預設值是 100。如果指定 0,則沒有限制。

with cte_temp   --公用表表示式(common table expression)

as(select * from provincecity_test where value like '%西安%'

union all

select a.* from provincecity_test a

inner join cte_temp b on a.id = b.parentid --父子級關係,遞迴,遞迴部分不允許使用外部聯接(不允許使用left join等)

) select * from cte_temp option(maxrecursion 2)

Oracle中With As 的使用方法

with as 關鍵字,是以 with 關鍵字開頭的sql語句,在實際工作中,經常會遇到查詢語句大部分相同的sql語句,這時就可以將相同的sql語句抽取出來,使用with as定義,以便提高sql的查詢效率和 的簡潔。抽取出來多次使用 with as 可以理解為一張臨時表或者理解成sql片段,在多次...

遞迴的使用方法

遞迴函式就是直接或間接呼叫自身的函式,直接上程式 遞迴加法 我們通過程式可以看出 如果想要得到5個數相加,就要知道前4個數相加即 4 3 2 1 以此類推,直到當n 1時,返回n。所以每次呼叫自身函式然後進行累加求和。乘法亦是如此。資料入棧 先進的資料放在棧底。資料出棧 我們可以看出,遞迴對棧區的占...

pythonpip使用方法 pip使用方法整理

匯出專案已安裝的pip包 pip list 檢視專案中安裝的包 pip freeze requirements.txt 將專案中所用到的第三方庫輸出到requirements.txt中 pip install 版本號 pip install i 本次使用清華源進行安裝 離線安裝第三方庫 一鍵安裝整個...