现有数据结构如下图所示
由U和U2,2个栏位,可以看出此示例数据表示着2条“链”。
1、A =》B=》C=》D=》E
2、A1=》B1=》C1
要搜出这样的数据,oracle有“connect by... start with”来遍历树结构,避免了写递归函数。
SQL2005没有对应的函数,但使用SQL2005提供的CTE(Common Table Expression)可以实现“connect by... start with”的遍历。
假设我们要找出第一条“链”(A =》B=》C=》D=》E)
Sql实现:
with custom_cte_query(id,u,u2)
as
(
--起始条件
select id,u,u2
from cte_test
where u = 'A'
union all
--递归条件
select a.id,a.u,a.u2
from cte_test a
inner join
custom_cte_query b
on (a.u = b.u2)
)
select * from custom_cte_query
执行获得结果
参考: