Oracle树操作、递归查询

select … from tablename
start with 条件1
connect by 条件2
where 条件3;

例:

select * from table
start with org_id = ‘HBHqfWGWPy’
connect by prior org_id = parent_id;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。

用上述语法的查询可以取得这棵树的所有记录。

其中:

  • 条件1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树
  • 条件2是连接条件,其中用prior表示上一条记录,比如connect by prior org_id = parent_id就是说上一条记录的org_id是本条记录的parent_id即本记录的父亲是上一条记录
  • 条件3是过滤条件,用于对返回的所有记录进行过滤

在扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:

  • 第一步:从根节点开始
  • 第二步:访问该节点
  • 第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步
  • 第四步:若该节点为根节点,则访问完毕,否则执行第五步
  • 第五步:返回到该节点的父节点,并执行第三步骤
  • 总之:扫描整个树结构的过程也即是中序遍历树的过程
-------------本文结束感谢您的阅读-------------

本文标题:Oracle树操作、递归查询

文章作者:Monkey

发布时间:2018年12月04日 - 20:12

最后更新:2018年12月08日 - 18:12

原始链接:https://monkeyip.github.io/2018/12/04/Oracle树操作、递归查询/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!