zoukankan      html  css  js  c++  java
  • Oracle:递归查询

    工作遇到,总结一下!

    一:表结构、数据

     插入数据:

    insert into org values(1,'总部',null);
    insert into org values(2,'分部',1);
    insert into org values(3,'安徽分部',2);
    insert into org values(4,'江苏分部',2);
    insert into org values(5,'合肥分部',3);
    insert into org values(6,'南京分部',4);
    

     二.查询分部及其下面所有的部门:

    两种写法均可 :
    SELECT* FROM org START WITH name = '分部' CONNECT BY PRIOR id = parent_id;
    
    SELECT* FROM org START WITH name = '分部' CONNECT BY parent_id = PRIOR id ;
    

     注意:prior后面紧跟的参数是id,意味查询name='分部'的部门的id作为后面递归查询的条件,即后面的部门的parent_id要等于查询出来的id。

    三.查询合肥分部及其上面所有的部门:

    两种写法均可 :
    SELECT* FROM org START WITH name = '合肥分部' CONNECT BY id = PRIOR  parent_id;
    
    SELECT* FROM org START WITH name = '合肥分部' CONNECT BY PRIOR parent_id = id ;
    

     注意:prior后面紧跟的参数是parent_id,意味查询name='合肥分部'的部门的parent_id作为后面递归查询的条件,即后面的部门的id要等于查询出来的parent_id。 

    记住一点:prior后面跟的是哪个字段,那么这个字段就作为后面递归查询的条件

    四.死循环的解决办法

    insert into org values(7,'A',9);
    insert into org values(8,'B',7);
    insert into org values(9,'C',8);
    

     当出现死循环时,使用上述查询语句会报错:

     可以使用关键字nocycle

    SELECT* FROM org START WITH name = 'A' CONNECT BY nocycle id = PRIOR  parent_id;
    

      

  • 相关阅读:
    eclipse配置spring4.0环境详细教程
    PostgreSQL精简命令:
    Unity3D项目之 Survival Shooter 记录
    Unity UGUI 实现简单拖拽功能
    Unity UGUI实现Button按钮长按状态的判断
    Unity获取文件夹下指定类型的文件数量
    Unity5 AssetBundle打包加载及服务器加载
    Unity5.X 新版AssetBundle打包控制
    Unity基于DFGUI的TreeView设计
    Unity5.X 新版AssetBundle使用方案及策略
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/12839604.html
Copyright © 2011-2022 走看看