Oracle start with connect by prior 递归查询树桩结构用法 

本文深入探讨了SQL中层级查询的实现原理与具体应用场景,包括层级查询的基础语法、使用技巧以及实例解析,旨在帮助开发者更高效地组织和管理多级数据结构。

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

--测试数据
create table test_lvl1 (id number, parent_id number, name varchar2(10));
insert into test_lvl1 values (1,null,'SLI1');
insert into test_lvl1 values (2,1,'SLI2');
insert into test_lvl1 values (3,1,'SLI3');
insert into test_lvl1 values (4,null,'SLI4');
insert into test_lvl1 values (5,2,'SLI5');
insert into test_lvl1 values (6,3,'SLI6');
insert into test_lvl1 values (7,5,'SLI7');


select * from test_lvl1;


 
/*
   解释一下:
    1. Start with表示从那一层开始的,后面跟表达式,如: pid=0,
    寻找继承关系时,指定的顶点,如果需要对整个表进行整理,比较常用
    的作法是:  PID is null. 例如这种情况顶点的Parent_ID显然是NULL,
    所以从PID is null开始无疑是最完整的。
    
   2. prior 表示返回所以符合这种条件(如id=pid)的connect by操作结果.
*/
 
 
select name, ID, PARENT_ID, LEVEL
          from test_lvl1
         start with parent_id is null
        connect by prior id = PARENT_ID  --连接条件
        order by id
        
        
 -- 使用连接查询
 select a.* ,b.name as parentName
   from test_lvl1 a
   left join (select name, ID, PARENT_ID, LEVEL
                from test_lvl1
               start with parent_id is null
              connect by prior id = PARENT_ID) b 
       on a.parent_id = b.id
   order by a.id      
        
   
-- sql 1992语法连接查询    
   select a.*, b.name as parent_name
  from (select name, ID, PARENT_ID, LEVEL
          from test_lvl1
         start with parent_id is null
        connect by prior id = PARENT_ID) a,
       test_lvl1 b
 where a.parent_id = b.id(+) -- + 表示补充,b表就是匹配表,左表全部显示。
   order by a.id 
        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值