Oracle的递归查询

由于是内网开发,在此就不贴图了,深感遗憾......

oracle的递归查询的语法

select * from t_table start with 字段1='字段值'  connect by prior 子字段=父字段;    以字段值1为查询的根节点,向下递归查询

select * from t_table start with 字段1='字段值'  connect by prior 父字段=子字段;    以字段值1为查询的根节点,向上递归查询

无数据参照的话,上面两句较为难以理解

Oracle的递归查询的start with 后的那个字段作为根, 并不是你的表的设置的根,拿一个简单的例子来说就是:

总行>北京分行>海淀分行

按照惯有理解来说,我们认为‘‘总行’’是根节点,但是在start with后如何你设置的是“北京分行”’的话,那么北京分行就做为了这个递归查询的根,最终是查不到“总行”的,“根”的含义需要你在实际的数据处理中进行加深理解

1.查询指定的节点递归到节点的根节点的值

select id,p_id,dept_name,

    connect_by_root(id)  root_id,

    connect_by-root(dept_name) root_dept_name

from t_dept

where id='001001001001'

 start with id='001001'

connect by prior id=p_id;

注:connect_by_root是和递归查询连用的函数,获取的是根的字段信息

2.递归路径信息,比如将部门所属的层级部门一起罗列在一个字段中

select dept_id,dept_name,p_dept_id,

    substr(sys_connect_by_path(dept_name,'->'),3)  name_path

   from t_dept_info

   start with dept_id='001'

   connect by prior dept_id=p_dept_id;

注:sys_connect_by_path会记录下递归查询过程中的各层级的值并将其拼接起来

它的第二个参数是一个输出格式,在每个字段前会加上这个符号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值