Oracle start with connect by prior 递归查询

准备数据:组织机构表

create table TABLE_ORG
(
  id     NUMBER(10) not null,
  name   VARCHAR2(64),
  code   VARCHAR2(32),
  parent VARCHAR2(128),
  status CHAR(1)
);
-- Add comments to the columns 
comment on column TABLE_ORG.id
  is '主键';
comment on column TABLE_ORG.name
  is '组织名称';
comment on column TABLE_ORG.code
  is '本组织编码';
comment on column TABLE_ORG.parent
  is '父组织编码';

insert into table_ORG (ID, NAME, CODE, PARENT, STATUS)
values (152, '南京大学', '0', null, null);

insert into table_ORG (ID, NAME, CODE, PARENT, STATUS)
values (144, '经济管理系', '1', '0', '1');

insert into table_ORG (ID, NAME, CODE, PARENT, STATUS)
values (146, '现代经济学', '3', '1', '1');

insert into table_ORG (ID, NAME, CODE, PARENT, STATUS)
values (145, '计算机系', '2', '0', '1');

insert into table_ORG (ID, NAME, CODE, PARENT, STATUS)
values (147, '网络工程', '4', '2', '1');
start withconnect by prior语句完成递归记录,形成一棵树形结构,通常可以在具有层次结构的表中使用。
start with:表示开始的记录
connect by prior:指定与当前记录关联时的字段关系
select t.*   from table_ORG  t ;

在这里插入图片描述

 SELECT * from table_ORG  start with
       CODE = '0' CONNECT by  PARENT = PRIOR code    

 SELECT * from table_ORG  start with
       CODE = '0' CONNECT by  PRIOR code = PARENT  

以上两条sql意思一样,查询从code=0’开始,取出查出数据的code,作为parent条件查询
步骤1.select *  from   table_ORG   where  CODE = '0' 
步骤2.select *  from   table_ORG   where  PARENT  = (select code from   table_ORG   where  CODE = '0' )
步骤3.select *  from   table_ORG   where  PARENT  = (
select code   from   table_ORG   where  PARENT  = (select code from   table_ORG   where  CODE = '0' )
)
递归查询,直到查到的数据量行数为0停止递归。

在这里插入图片描述

常用实例1:处理资源菜单层级

----资源菜单表没有层级说明,通过oracle函数查询生成
select LEVEL,t.menuid,parentid,title  from sys_resources t 
start with  parentid is null  connect by  parentid=prior menuid;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值