oracle 树状查询,查询根节点

本文介绍了在Oracle数据库中查询树状结构根节点的三种方法,包括使用SYS_CONNECT_BY_PATH函数结合字符串操作以及Oracle 10g引入的CONNECT_BY_ROOT伪列。通过示例展示了如何查询以特定ID为起点的所有子节点,并讨论了效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、第一种方法

SQL> SELECT TO_NUMBER(SUBSTR(PATH, 2, INSTR(PATH, '/', 2) - 2)) ROOT_ID, ID
2 FROM
3 (
4 SELECT SYS_CONNECT_BY_PATH(ID, '/') || '/' PATH, ID
5 FROM TEST
6 WHERE ROWNUM < 10
7 CONNECT BY PRIOR ID = FID
8 )
9 ;

ROOT_ID ID ------------ ------------
1 1
1 2
1 200516
1 2005859
1 2005862
1 2005864
1 2005866
1 2005867
1 2005865

已选择9行。

2、第二种方法

SELECT TO_NUMBER(SUBSTR(SYS_CONNECT_BY_PATH(ID,'/') || '/',2,INSTR(SYS_CONNECT_BY_PATH(ID,'/') || '/','/','2')-2)) ROOT_ID FROM TEST START WITH ID = 1 CONNECT BY PRIOR ID = FID;

3、第三种方法

SELECT TO_NUMBER(SUBSTR(PATH,2,INSTR(PATH,'/','2')-2)) ROOT_ID FROM (SELECT SYS_CONNECT_BY_PATH(ID,'/') || '/' PATH FROM TEST START WITH ID=1 CONNECT BY PRIOR ID = FID);

测试第三中方法的效率比较高。

以上是Oracle9i提供的算法

 

Oracle 10g提供了 伪列或者说(函数)

SELECT CONNECT_BY_ROOT(ID),ID FROM TEST CONNECT BY PRIOR ID = FID;

最快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值