關於使用CTE(通用資料表運算式)的遞迴查詢

來源:互聯網
上載者:User

本文轉載:http://www.cnblogs.com/shuangnet/archive/2013/03/22/2975929.html

 

通用資料表運算式 (CTE) 具有一個重要的優點,那就是能夠引用其自身,從而建立遞迴 CTE。遞迴 CTE 是一個重複執行初始 CTE 以返回資料子集直到擷取完整結果集的通用資料表運算式。

  當某個查詢引用遞迴 CTE 時,它即被稱為遞迴查詢。遞迴查詢通常用於返回分層資料,例如:顯示某個組織圖中的僱員或物料清單方案(其中父級產品有一個或多個組件,而那些組件可能還有子組件,或者是其他父級產品的組件)中的資料。

  遞迴 CTE 可以極大地簡化在 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 語句中運行遞迴查詢所需的代碼。在 SQL Server 的早期版本中,遞迴查詢通常需要使用暫存資料表、遊標和邏輯來控制遞迴步驟流。 

CTE 的基本文法結構如下:

    WITH expression_name [ ( column_name [,...n] ) ]    AS    ( CTE_query_definition )    --只有在查詢定義中為所有結果列都提供了不同的名稱時,列名稱列表才是可選的。    --運行 CTE 的語句為:    SELECT <column_list> FROM expression_name;

在使用CTE時應注意如下幾點:

CTE後面必須直接跟使用CTE的SQL語句(如select、insert、update等),否則,CTE將失效。如下面的SQL語句將無法正常使用CTE:

  with  cr as  (      select * from 表名 where 條件   )  --select * from person.CountryRegion  --如果加上這句話後面用到cr將報錯   select * from cr

2. CTE後面也可以跟其他的CTE,但只能使用一個with,多個CTE中間用逗號(,)分隔,如下面的SQL語句所示:

withcte1 as(    select * from table1 where name like '測試%'),cte2 as(    select * from table2 where id > 20),cte3 as(    select * from table3 where price < 100)select a.* from cte1 a, cte2 b, cte3 c where a.id = b.id and a.id = c.id

3. 如果CTE的運算式名稱與某個資料表或視圖重名,則緊跟在該CTE後面的SQL語句使用的仍然是CTE,當然,後面的SQL語句使用的就是資料表或視圖。

4. CTE 可以引用自身,也可以引用在同一 WITH 子句中預先定義的 CTE。

5. 不能在 CTE_query_definition 中使用以下子句:

  •  COMPUTE 或 COMPUTE BY
  •  ORDER BY(除非指定了 TOP 子句)
  •  INTO
  •  帶有查詢提示的 OPTION 子句
  •  FOR XML
  •  FOR BROWSE

6. 如果將 CTE 用在屬於批處理的一部分的語句中,那麼在它之前的語句必須以分號結尾,如下面的SQL所示:

declare @s nvarchar(3)set @s = '測試%';  -- 必須加分號witht_tree as(    select * from 表 where 欄位 like @s)select * from  t_tree

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.