sqlserver递归查询示例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

sqlserver递归查询⽰例
⽰例题⽬:
有⼀张表T0617,⾥⾯的数据如下:
希望得到如下结果
该如何写这个查询?
⽰例数据:
CREATE TABLE T0617
(ID INT,
PID INT
)
INSERT INTO T0617 VALUES
(1,0),(2,1),(3,2),(4,3)
查询sql:
WITH CTE AS (
SELECT ID,PID,CAST(ID AS VARCHAR(1000)) AS PATH
FROM T0617
WHERE ID =1
UNION ALL
SELECT A.ID,A.PID,CAST ((CTE.PATH +'->'+CAST(A.ID AS VARCHAR(10))) AS VARCHAR(1000)) AS PATH
FROM T0617 A
INNER JOIN CTE ON A.PID = CTE.ID
)
SELECT*FROM CTE
思路解析:
with as语句官⽅定义:指定临时命名的结果集,这些结果集称为公⽤表表达式 (CTE)。

公⽤表表达式可以包括对⾃⾝的引⽤。

这种表达式称为递归公⽤表表达式。

通俗理解,with as语句为⼦查询部分,可以定义⼀个sql⽚段,该⽚段可以被整个sql语句使⽤,并且with as语句具体可以对⾃⾝引⽤的特性,利⽤该特性可以实现递归查询。

递归sql解析:递归查询需要包含两个部分,上半部分为定位点,下半部分与公⽤表表达式⾃⾝进⾏关联查询。

⽐如第⼀次循环的时候只查询出上半部分,第⼆次循环的时候,下半部分与第⼀次循环的结果进⾏关联查询,第三次与第⼆次的结果进⾏关联,以此类推,直到⽆法找到与上⼀次结果进⾏关联时停⽌。

相关文档
最新文档