Oracle 迭代查询 CONNECT BY PRIOR ……START WITH ……

来源:互联网 发布:fork软件 编辑:程序博客网 时间:2024/06/05 02:39

 connect by prior start with 经常会被用到一个表中存在递归关系的时候。比如我们经常会将一个比较复杂的目录树存储到一个表中。或者将一些部门存储到一个表中,而这些部门互相有隶属关系。这个时候你就会用到connect by prior start with。

 表结构:

create table TB_ORG
(
  ORGID            VARCHAR2(50) not null,
  ORGNAME          VARCHAR2(100),
  ORGPARENT        VARCHAR2(50),
)

SQL> select orgid,ORGPARENT from tb_org order by ORGid desc;

ORGID                                              ORGPARENT
-----------------                                   --------------------------------------------------
top_org                                           
newsroom                                      top_org

sjgt                                                 newsroom
bgjsyj                                             newsroom
bgjs                                                newsroom
test52                                            bgjsyj
test36                                            bgjsyj
test3                                              bgjs
test2                                              sjgt
test1                                              sjgt
tes4t1                                             bgjs

--子取父
select * from tb_org CONNECT BY PRIOR orgparent=orgid START WITH orgid='newsroom'
-----子取父变形 ()
select * from tb_org CONNECT BY PRIOR orgparent=orgid START WITH orgparent='newsroom'
--父取子(结果中没有父这条记录)
select * from tb_org CONNECT BY PRIOR orgid=orgparent START WITH orgparent='newsroom'
-----父取子变形(多了父这一级)
select * from tb_org connect by prior orgid=orgparent start with orgid ='newsroom'

 

 

 

注意orgid=orgparent 和orgparent=orgid

原创粉丝点击