Oracle树形结构的sql语句

  ORACLE提供了一种树形结构用来实现层次查询:

    START WITH :指定记录是根节点的条件。根节点可以有多个。

    CONNECT BY :指定记录之间是父节点和子节点关系的条件。查找出含有子节点的父节点的条件

    PRIOR :指定父节点记录的引用。

    SIBLINGS :指定树的排序。同一父节点下的兄弟节点的顺序。

  树在数据库表中的存储结构,如下:

create table TREE  (
   ID                   NUMBER                          not null,    //主键
   PID                  NUMBER                          not null,    //父节点id
   ORDER_ID             NUMBER                          not null,    //排序id
   NODE_NAME            VARCHAR2(100)                   not null,    //节点名称
   DEL                  VARCHAR2(5),                                 //删除标识  1:为删除
   constraint PK_TREE primary key (ID)
);

  实例sql语句如下:

SELECT * FROM tree WHERE del <> 1 START WITH pid = 0 AND del <> 1 
CONNECT BY PRIOR id = pid AND del <> 1 ORDER SIBLINGS BY order_id

  查询出来的结果就是按树排序的记录集。

  如果用到了逻辑删除(假删除),那么上述sql语句中三处的del <> 1的意义是不同的。第一处是在表中全部记录中筛选出没有被标记删除的记录(缩短生成树的计算范围),第二处是筛选出根节点没有被标记删除的根节点的记录,第三处是是筛选出含有子节点的父节点没有被标记删除的父节点的记录

 

  

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangpeng047/article/details/6877917
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭