ORACLE 数据库的级联查询 一句sql搞定(例:部门多级,类型多级)

oracle中,有时候会遇到批量操作多级部门下的数据或者是多级类别下文档,一句sql搞定想要查询的数据,并对其增删改操作,如下:


查询某条数据下是否有子节点:

select *          //要查询的字段
from table      //具有子接点id和父接点id的表
start with childid=id数据           //给定一个开始查询的id(字段名为子接点id,以及开始的id数据)
connect by prior childid= pid    //联接条件为子接点等于父接点 


查询某条数据上是否有父节点:


select *          //要查询的字段
from table      //具有子接点id和父接点id的表
start with childid=id数据          //给定一个开始查询的id(字段名为子接点id,以及开始的id数据)
connect by prior pid= childid   //联接条件为父接点等于子接点

实际举个例子,更好理解:

多级查询,数据结构如下:

a
  b
    c
      d
        e1
        e2

db数据字段如下:

id		name						unit_id		pid
-------------------------------------------------------
710		部门文档					527	
1262	规章制度					527			710
2331	日常管理					527			710
2349	设备管理					527			710
2350	电梯						527			2349
2351	综合办公楼电梯				527			2350
2352	电梯保养作业报告			527			2351
2353	电梯维修报告				527			2351
12837	港口(建筑)设施维修管理	527			710
12838	港口主要设施				527			12837
12839	港口附属设施				527			12837


在上表中查找id=2351 相关联的所有的父节点以及所有的子节点数据,级联sql如下:


select t.* from OA_DEPT_DOC_TYPE t start with id='2351' connect by prior pid = id
UNION
select t.* from OA_DEPT_DOC_TYPE t start with id='2351' connect by prior id = pid


查询的结果如下:

id		name				unit_id		pid
-----------------------------------------------
710		部门文档			527	
2349	设备管理			527			710
2350	电梯				527			2349
2351	综合办公楼电梯		527			2350
2352	电梯保养作业报告	527			2351
2353	电梯维修报告		527			2351

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值