递归 SQL 查询
Recursive SQL Query
首先感谢您的帮助,我不是 sql 方面的专家,也许可以做一个非常基本的问题
我的数据库是 SQL Server 2012
我有一个 table 字段如下所示
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]
感谢帮助
在递归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
我想您会很容易地根据自己的表格进行调整。
首先感谢您的帮助,我不是 sql 方面的专家,也许可以做一个非常基本的问题
我的数据库是 SQL Server 2012
我有一个 table 字段如下所示
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]
感谢帮助
在递归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
我想您会很容易地根据自己的表格进行调整。