【发布时间】:2018-06-19 01:20:54
【问题描述】:
我有一个包含以下数据的表格。
Road City
R1 C1
R2 C2
R3 C1
R3 C3
R4 C3
R4 C5
R5 C5
如果 R1 是输入,我需要将 R1、R3、R4 和 R5 作为输出。这是因为 R1 属于 C1,C1 有 R3,R3 也属于 C3,C3 有 R4,同样 R5。
我试图利用 CTE 递归,但无法使其工作。我尝试了存储过程递归调用,但它只有 30 级深。
with tmp1 as (
select ROAD, CITY, 1 as Level from table R1 WHERE ROAD = 1712
UNION ALL
select R2.ROAD, R2.CITY,Level + 1 as Level
from tmp1 INNER JOIN table R2 ON tmp1.CITY = R2.CITY and tmp1.ROAD <> R2.ROAD
)
select * from tmp1
OPTION (maxrecursion 0)
任何想法都非常感谢!
【问题讨论】:
-
能否分享您编写的 SP,我们可以尝试改进。谢谢
-
SP 不起作用,因为数据深度超过 30 级。
-
添加了我正在研究的 CTE
标签: sql sql-server recursion sql-server-2012 common-table-expression