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的意义是不同的。第一处是在表中全部记录中筛选出没有被标记删除的记录(缩短生成树的计算范围),第二处是筛选出根节点没有被标记删除的根节点的记录,第三处是是筛选出含有子节点的父节点没有被标记删除的父节点的记录

 

  

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值