您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Oracle start with connect by prior 递归查询

bubuko 2022/1/25 20:08:06 其他 字数 10328 阅读 843 来源 http://www.bubuko.com/infolist-5-1.html

Oracle start with connect by prior 递归查询 基本语法: select … from tablename where 条件1 start with 条件2 connect by 条件3(PRIOR); 条件1:相当于基本的筛选数据 条件2:递归查询起始条件 条件3: ...

Oracle start with connect by prior 递归查询


基本语法:

selectfrom tablename
where 条件1
start with 条件2
connect by 条件3(PRIOR);

条件1:相当于基本的筛选数据

条件2:递归查询起始条件

条件3:连接条件,其中用PRIOR表示上一条记录的结果作为本次查询的条件,比如:

  CONNECT BY PRIOR id= parent_id;就是说上一条记录的id是本条记录的parent_id再进行查询(查子集);

  CONNECT BY id= PRIOR parent_id;就是说上一条记录的parent_id是本条记录的id再进行查询(查父集);


进行实验说明:

原始表数据:

技术分享图片

对应关系图:

技术分享图片

1.实验一:(查询自己及自己所有子集)

SELECT DISTINCT ID,level
        FROM org
        where DELETEFLAG =0 and ENABLEFLAG = 0
        START WITH id = 1
        CONNECT BY PRIOR ID=PARENTID

查询结果:

技术分享图片

可以看出,查询出id为1的所有子集与他自己,查询过程:第一次查询为:id=1的;第二次查询为:PARENTID=第一次查询的id;第三次查询为:PARENTID=第二次查询的id

其中level可以看出树的层级

2.实验二:(进一步验证实验一)

SELECT DISTINCT ID,level
        FROM org
        where DELETEFLAG =0 and ENABLEFLAG = 0
        START WITH id = 10
        CONNECT BY PRIOR ID=PARENTID

查询结果:

技术分享图片

查询出id为10的记录及其子集,并未查询其父集

3.实验三:(仅查询子集)

SELECT DISTINCT ID,level
        FROM org
        where DELETEFLAG =0 and ENABLEFLAG = 0
        START WITH parentid = 1
        CONNECT BY PRIOR ID=PARENTID

查询结果:

技术分享图片

查询出id=1的子集,因为START WITH(初始条件)查询的是parentid  = 1 的记录

4.实验四:(START WITH 后条件也可为多条件)

SELECT DISTINCT ID,level
        FROM org
        where DELETEFLAG =0 and ENABLEFLAG = 0
        START WITH (id=10 or id=2 or id=280)
        CONNECT BY PRIOR ID=PARENTID

查询结果:
技术分享图片

发现查询结果与实验三一致

5.实验五:(查询自己及父集)

SELECT DISTINCT ID,level
        FROM org
        where DELETEFLAG =0 and ENABLEFLAG = 0
        START WITH id = 270
        CONNECT BY ID = PRIOR PARENTID

查询结果:

技术分享图片

查询出自己及父集

6.实验六:(对查询结果 order by)

SELECT DISTINCT ID,level
        FROM org
        where DELETEFLAG =0 and ENABLEFLAG = 0
        START WITH id = 1
        CONNECT BY PRIOR ID=PARENTID
        order by level

查询结果:

技术分享图片

证明,可以对查询后结果进行相关操作

7.实验七:(可以通过where条件筛选自己所需要的数据)

SELECT DISTINCT ID,level
        FROM org
        where DELETEFLAG =0 and ENABLEFLAG = 0
        and level!=3 
        START WITH id = 1
        CONNECT BY PRIOR ID=PARENTID

查询结果:

技术分享图片

证明我们可以通过where 条件查询我们所需要的数据


结束

Oracle start with connect by prior 递归查询

原文:https://www.cnblogs.com/zktww/p/12419045.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶