首頁 資料庫 mysql教程 使用公用表表达式的递归查询

使用公用表表达式的递归查询

Jun 07, 2016 pm 03:56 PM
使用 引入 微軟 查詢 表達式 遞迴

微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个查询引用递

  微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。

  公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。

  当某个查询引用递归 CTE 时,它即被称为递归查询。递归查询通常用于返回分层数据,例如:显示某个组织图中的雇员或物料清单方案(其中父级产品有一个或多个组件,而那些组件可能还有子组件,或者是其他父级产品的组件)中的数据。

  递归 CTE 可以极大地简化在 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句中运行递归查询所需的代码。在 SQL Server 的早期版本中,递归查询通常需要使用临时表、游标和逻辑来控制递归步骤流。有关公用表表达式的详细信息,请参阅使用公用表表达式。

伪代码和语义

————————————————————————————

递归 CTE 结构必须至少包含一个定位点成员和一个递归成员。以下伪代码显示了包含一个定位点成员和一个递归成员的简单递归 CTE 的组件。

WITH cte_name ( column_name [,...n] )

AS

(

CTE_query_definition –- Anchor member is defined.

UNION ALL

CTE_query_definition –- Recursive member is defined referencing cte_name.

)

-- Statement using the CTE

SELECT * FROM cte_name

递归执行的语义如下:

  1. 将 CTE 表达式拆分为定位点成员和递归成员。
  2. 运行定位点成员,创建第一个调用或基准结果集 (T0)。
  3. 运行递归成员,将 Ti 作为输入,将 Ti+1 作为输出。
  4. 重复步骤 3,直到返回空集。
  5. 返回结果集。这是对 T0 到 Tn 执行 UNION ALL 的结果。

    示例

    ————————————————————————————

    原表:

    \

     现在有一个需求,要查询出某个省下面的所有市和区(查询结果包含省)。如果只使用SQL语句来实现,需要使用到游标、临时表等技术。但在SQL Server2005中还可以使用CTE来实现。

    WITH district

    AS

    (

    --获得第一个结果集,并更新最终结果集

    SELECT * FROM t_tree WHERE id = 0

    UNION ALL

    --下面的select语句首先会根据从上一个查询结果集中获得的id值来查询parent_id

    --字段的值,然后district就会变当前的查询结果集,并继续执行下面的select 语句

    --如果结果集不为null,则与最终的查询结果合并,同时用合并的结果更新最终的查

    --询结果;否则停止执行。最后district的结果集就是最终结果集。

    SELECT a.* FROM t_tree aINNER JOIN district bONa.parent_id = b.id

    )

    SELECT * FROM district

    查询结果:

    \

    有关使用公用表表达式的详细信息,请参阅使用公用表表达式的递归查询。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1246
24
C++ 函式的遞歸實作:遞迴深度有限制嗎? C++ 函式的遞歸實作:遞迴深度有限制嗎? Apr 23, 2024 am 09:30 AM

C++函數的遞歸深度受到限制,超過此限制會導致堆疊溢位錯誤。限制值因係統和編譯器而異,通常在1000到10000之間。解決方法包括:1.尾遞歸最佳化;2.尾呼叫;3.迭代實作。

BTCC教學:如何在BTCC交易所綁定使用MetaMask錢包? BTCC教學:如何在BTCC交易所綁定使用MetaMask錢包? Apr 26, 2024 am 09:40 AM

MetaMask(中文也叫小狐狸錢包)是一款免費的、廣受好評的加密錢包軟體。目前,BTCC已支援綁定MetaMask錢包,綁定後可使用MetaMask錢包進行快速登錄,儲值、買幣等,且首次綁定還可獲得20USDT體驗金。在BTCCMetaMask錢包教學中,我們將詳細介紹如何註冊和使用MetaMask,以及如何在BTCC綁定並使用小狐狸錢包。 MetaMask錢包是什麼? MetaMask小狐狸錢包擁有超過3,000萬用戶,是當今最受歡迎的加密貨幣錢包之一。它可免費使用,可作為擴充功能安裝在網絡

微軟發布 Win11 八月累積更新:提高安全性、優化鎖定螢幕等 微軟發布 Win11 八月累積更新:提高安全性、優化鎖定螢幕等 Aug 14, 2024 am 10:39 AM

本站8月14日訊息,在今天的8月補丁星期二活動日中,微軟發布了適用於Windows11系統的累積更新,包括針對22H2和23H2的KB5041585更新,面向21H2的KB5041592更新。上述設備安裝8月累積更新之後,本站附上版本號變更如下:21H2設備安裝後版本號升至Build22000.314722H2設備安裝後版本號升至Build22621.403723H2設備安裝後版本號升至Build22631.4037面向Windows1121H2的KB5041585更新主要內容如下:改進:提高了

微軟 Win11 壓縮為 7z、TAR 檔案的功能已從 24H2 下放到 23H2/22H2 版本 微軟 Win11 壓縮為 7z、TAR 檔案的功能已從 24H2 下放到 23H2/22H2 版本 Apr 28, 2024 am 09:19 AM

本站4月27日消息,微軟本月初向Canary和Dev頻道發布了Windows11Build26100預覽版更新,預估會成為Windows1124H2更新的候選RTM版本。新版本中最主要的變化在於檔案總管、整合Copilot、編輯PNG檔案元資料、建立TAR和7z壓縮檔案等等。 @PhantomOfEarth發現,微軟已經將24H2版本(Germanium)部分功能下放到23H2/22H2(Nickel)版本中,例如創建TAR和7z壓縮檔。如示意圖所示,Windows11將支援原生建立TAR

微軟全螢幕彈窗催促:Windows 10用戶抓緊時間升級到Windows 11 微軟全螢幕彈窗催促:Windows 10用戶抓緊時間升級到Windows 11 Jun 06, 2024 am 11:35 AM

6月3日訊息,微軟正在積極向所有Windows10用戶發送全螢幕通知,鼓勵他們升級到Windows11作業系統。這項舉措涉及了那些硬體配置並不支援新系統的設備。自2015年起,Windows10已經佔了近70%的市場份額,穩坐Windows作業系統的霸主地位。然而,市佔率遠超過82%的市場份額,佔有率遠超過2021年問世的Windows11。儘管Windows11已經推出已近三年,但其市場滲透率仍顯緩慢。微軟已宣布,將於2025年10月14日後終止對Windows10的技術支持,以便更專注於

微軟推出新版Outlook for Windows:行事曆功能全面升級 微軟推出新版Outlook for Windows:行事曆功能全面升級 Apr 27, 2024 pm 03:44 PM

在4月27日的消息中,微軟公司宣布即將發布新版OutlookforWindows客戶端的測試。此次更新主要聚焦於優化行事曆功能,旨在提升使用者的工作效率,進一步簡化日常工作流程。新版OutlookforWindows客戶端的改進點在於其更強大的行事曆管理功能。現在,使用者能夠更方便地分享個人的工作時間與地點訊息,使得會議規劃更有效率。此外,Outlook還新增了人性化設置,讓用戶設定會議自動提前結束或推遲開始,為用戶提供了更多的靈活性,無論是換會議室、稍作休息還是享受一杯咖啡,都能輕鬆安排。根據

微軟計畫2024年下半年在Windows 11中淘汰NTLM,全面轉向Kerberos認證 微軟計畫2024年下半年在Windows 11中淘汰NTLM,全面轉向Kerberos認證 Jun 09, 2024 pm 04:17 PM

2024年下半年,微軟安全官方部落格發布了一則訊息,回應安全社群的呼籲。本公司計畫在2024年下半年發布的Windows11中淘汰NTLANManager(NTLM)認證協議,以提升安全性。根據先前的解釋,微軟先前已經有過類似的動作。去年10月12日,微軟在一份官方新聞稿中就已經提出了一個過渡計劃,旨在逐步淘汰NTLM身份驗證方式,並推動更多企業和用戶轉向使用Kerberos。為了幫助那些可能在關閉NTLM驗證後遇到硬連線(hardwired)應用程式和服務問題的企業,微軟提供了IAKerb和

C++ 遞歸進階:瞭解尾遞歸最佳化及其應用 C++ 遞歸進階:瞭解尾遞歸最佳化及其應用 Apr 30, 2024 am 10:45 AM

尾遞歸最佳化(TRO)可提高特定遞歸呼叫的效率。它將尾遞歸呼叫轉換為跳轉指令,並將上下文狀態保存在暫存器中,而不是堆疊上,從而消除對堆疊的額外呼叫和返回操作,提高演算法效率。利用TRO,我們可以針對尾遞歸函數(例如階乘計算)進行最佳化,透過將tail遞歸呼叫替換為goto語句,編譯器會將goto跳轉移化為TRO,最佳化遞歸演算法的執行。

See all articles