当前位置:   article > 正文

Oracle SQL递归查询START WITH CONNECT BY 查询父子关系_oracle父子关系递归拼接

oracle父子关系递归拼接

START WITH  CONNECT BY查询

  1. SELECT ID, T.NAME, LEVEL
  2. FROM EDI_CDE_AREA T
  3. WHERE T.IS_VALID = '1'
  4. START WITH ID = '110113'
  5. CONNECT BY NOCYCLE PRIOR PID = ID
  6. ORDER BY LEVEL DESC;
  7. --, SYS_CONNECT_BY_PATH(NAME,'')拼接遍历信息
  8. SELECT ID, T.NAME, LEVEL , SYS_CONNECT_BY_PATH(NAME,' ')
  9. FROM EDI_CDE_AREA T
  10. WHERE T.IS_VALID = '1'
  11. START WITH ID = '110113'
  12. CONNECT BY NOCYCLE PRIOR PID = ID
  13. ORDER BY LEVEL DESC;
  14. ID NAME LEVEL SYS_CONNECT_BY_PATH(NAME,' ')
  15. 1 110100 市辖区 2 顺义区 市辖区
  16. 2 110113 顺义区 1 顺义区
  17. --增加向下递归
  18. SELECT T.*, LEVEL
  19. FROM CAS_RBAC_FUNCTION T
  20. START WITH PID = 'F001001'
  21. CONNECT BY NOCYCLE PRIOR ID = PID
  22. ORDER BY LEVEL ASC, ID;
查询结果
查询结果

这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点。

释义:

start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。

connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subid放在一起,则往叶子结点方向遍历, parentid、subid两列谁放在“=”前都无所谓,关键是prior跟谁在一起。

order by 子句:排序。

可能遇到问题:ORA-01436: 用户数据中的CONNECT BY 循环。

原因:递归字段中关联字段数据中存在了死循环。可以使用 NOCYCLE 关键字进行处理,可以将死循环数据剔除出去。

  1. SELECT ID, T.NAME, LEVEL , SYS_CONNECT_BY_PATH(NAME,' ')
  2. FROM EDI_CDE_AREA T
  3. WHERE T.IS_VALID = '1'
  4. START WITH ID = '110113'
  5. CONNECT BY NOCYCLE PRIOR PID = ID
  6. ORDER BY LEVEL DESC

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/497549
推荐阅读
相关标签
  

闽ICP备14008679号