KiMoGiGi 技术文集

不在乎选择什么,而在乎坚持多久……

IT博客 首页 联系 聚合 管理
  185 Posts :: 14 Stories :: 48 Comments :: 0 Trackbacks
现有数据结构如下图所示

sqlsnap1.jpg

由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

执行获得结果
sqlsnap2.jpg

参考:
posted on 2009-03-25 21:26 KiMoGiGi 阅读(645) 评论(0)  编辑 收藏 引用 所属分类: 数据库相关
只有注册用户登录后才能发表评论。