递归SQL查询

时间:2015-02-23 13:01:31

标签: sql sql-server recursive-query

首先感谢您的帮助,我不是sql专家,也许是一个非常基本的问题

我的数据库是SQL Server 2012

我有一个表格,其中包含以下字段

servicerequestareaid - enumtypeid              -value             -ordinal -    parentid
69  - D115C073-613F-F8C4-04A1-DE63B28D2496 -    Servidor Exchange - 0          - 68
70  - 3A09DA42-B33E-05EA-C2CB-167FECBDE346 -    Rol CAS           - 0          - 69
71  - E9AFC8C0-76F3-2B92-38A3-7A5B0F9FCD07 -    Perimetral        - 0          - 70
72  - 925F6D8C-EA24-798F-3D6C-EB64AC436D6F -    Asegurado         - 0          - 71

我需要获取该记录的servicerequestareaId,enumtypeId和parentId字段的值

我以servicerequestareaid的值开头,

parentid值对应于servicerequestareaid字段中存储的值到另一个记录

重复此过程,直到parentId中存储的值等于1

存储该组值后

必须显示

为此目的创建两个游标,但不想这样做,应该采用更有效的方式

![光标] [2]



感谢您的帮助

1 个答案:

答案 0 :(得分:1)

在递归cte中执行:

DECLARE @t TABLE(id INT, parent_id int)

INSERT INTO @t VALUES
(1, null),
(2, null),
(3, 1),
(4, 3),
(5, 2),
(6, 2),
(7, 5)


DECLARE @id INT = 7

;WITH cte AS(
SELECT * FROM @t WHERE id = @id
UNION ALL
SELECT t.* FROM @t t JOIN cte ON t.id = cte.parent_id
)
SELECT * FROM cte

输出:

id  parent_id
7   5
5   2
2   NULL

我认为你很容易将其调整到你的桌子上。