【通俗易懂】Oracle Start with 关键字递归查询父级所有组织和子集所有组织

3 篇文章 0 订阅
1 篇文章 0 订阅

一,基本语法

SELECT ... FROM    + 表名
START WITH         + 条件1
CONNECT BY PRIOR   + 条件2
WHERE              + 条件3

条件1:是根节点的限定语句,当然可以放宽限定条件,以取得多个根节点,也就是多棵树;在连接关系中,除了可以使用列明外,还允许使用列表达式。
START WITH 子句为可选项,用来标识哪个节点作为查找树形结构的根节点。若该子句省略,则表示所有满足查询条件的行作为根节点。


条件2:是连接条件,其中用PRIOR表示上一条记录,例如CONNECT BY PRIOR STUDENT_ID = GRADE_ID,意思就是上一条记录的STUDENT_ID是本条记录
的GRADE_ID,即本记录的父亲是上一条记录。CONNECT BY子句说明每行数据将是按照层次顺序检索,并规定将表中的数据连入树形结构的关系中。
PRIOR运算符必须放置在连接关系的2列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查
找树结构的顺序是自顶向下,还是自底向上。


条件3:是过滤条件,用于对返回的记录进行过滤。

二,举个栗子,方便理解

table_name:ORG (组织表)

table_column:ID (  VARCHAR ) 、 NAME (  VARCHAR ) 和 PARENTID(  VARCHAR )

数据:最高等级:中国(省市县镇这些数据纯属虚构,仅用于学习参考,无任何其他目的)

           省:云南、重庆、浙江、北京(重庆是省级组织,别纠结,不用管重庆)

           市:(云南的)红河市

           县:(红河的)屏边县

           镇:(屏边的)新华镇

 要求1:查询屏边县的上级组织的ID ,NAME

关键解读:查询级组织时,prior关键字跟随在PARENTID一侧

                  查询级组织时,prior关键字跟随在ID一侧

                  SQL中已标红

SQL: 

SELECT ID,NAME
             FROM CBOORG
             START WITH   ID =  '001111'   (屏边县ID)
             CONNECT BY  ID = PRIOR PARENTID

结果:

 要求2:查询屏边县的子级组织的ID ,NAME

SQL: 

SELECT ID,NAME
             FROM CBOORG
             START WITH   ID =  '001111'      (屏边县ID)
             CONNECT BY  PRIOR ID = PARENTID

 结果:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值