博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 中实现查找树形结构节点功能
阅读量:6242 次
发布时间:2019-06-22

本文共 2131 字,大约阅读时间需要 7 分钟。

hot3.png

这个方法只是对Oracle10以上才有效,对sqlserver、mysql没有测试

select connect_by_isleaf isleaf,

            tb.switch_type_id,
            sys_connect_by_path(tb.package_id, '|') path,
            tb.record_type,
            tb.element_offset,
            tb.element_length,
            tb.element_encode_type,
            tb.element_align,
            tb.mask,
            tb.asn_type
            from (select b.switch_type_id,
                    b.package_id,
                    b.element_offset,
                    b.element_length,
                    b.element_encode_type,
                    nvl(b.element_align, 'L') element_align,
                    b.record_type,
                    nvl(b.mask, 'LH') mask,
                    b.asn_type,
                    b.switch_type_id || '|' || b.package_level || '|' || b.package_id level_child,
                    b.switch_type_id || '|' || (b.package_level - 1) || '|' || b.parent_package_id level_parent
                 from switch_asn_record b
                 ) tb
             start with tb.level_parent like '%|0|-1'
             connect by prior tb.level_child = tb.level_parent;
1、connect_by_isleaf是否是子节点;
2、sys_connect_by_path(tb.package_id, '|')   ==>  |xxx|xxx|xxx
3、start with tb.level_parent like '%|0|-1'  ==> 树的遍历以从什么开始
4、connect by prior tb.level_child = tb.level_parent;  ==>此层遍历之后,再将child作为parent,继续往下遍历

 

 

 

select t.*, t.rowid from tbgm_goods_category t

--递归查出指定ID的所有上级节点

SELECT LPAD('',2*(LEVEL - 1), '') || gc.category_id AS category_id,gc.trade_id,gc.parent_category_id

  FROM tbgm_goods_category gc

  CONNECT BY PRIOR parent_category_id = category_id -- 找出所有DEPT_ID等于当前记录PARENT_ID的记录

  START WITH category_id = 216              -- 从部门4开始递归查询。

--递归查出指定ID的所有子级节点
SELECT LPAD('',2*(LEVEL - 1), '')||gc.category_id AS category_id,gc.trade_id,gc.parent_category_id,gc.category_depth

  FROM tbgm_goods_category gc

         where category_depth <= (SELECT category_depth FROM tbgm_goods_category where category_id = 214)+1
  CONNECT BY parent_category_id = PRIOR category_id -- 找出所有PARENT_ID等于当前记录DEPT_ID的记录。

  START WITH category_id = 214          -- 从部门2开始递归查询。

   
  

 

oracle 9I中查找一个节点的所有制叶子节点

select
  max(t.parent_category_id)keep(dense_rank last order by level)p,
  max(t.category_id)keep(dense_rank last order by level)c,
  max(t.category_name)keep(dense_rank last order by level)n
from tbgm_goods_category t
start with t.parent_category_id=259
connect by prior t.category_id=t.parent_category_id
--and prior child_type=/'special/'
group by rownum-level

转载于:https://my.oschina.net/u/3647620/blog/1552323

你可能感兴趣的文章
第一篇:SpringBoot 2 x 构建工程
查看>>
你不了解的vue中的v-on事件绑定
查看>>
CAShaperLayer&UIBezierPath系列(二)
查看>>
小程序自定义组件(1)
查看>>
聊聊Elasticsearch的ProcessProbe
查看>>
首页Activity重复启动问题
查看>>
人工智能+建筑,会产生什么?
查看>>
防抖与节流
查看>>
Cocos2dx源码记录(9) CCQuadCommand
查看>>
浅谈Promise怎么取消或中断
查看>>
JavaScript——执行环境及作用域
查看>>
C++ STL之stack栈
查看>>
【MySQL (6) | 详细分析MySQL事务日志redo log】
查看>>
Linux远程管理常用命令
查看>>
魅族mx5详细打开usb调试模式的步骤
查看>>
ConstraintLayout的使用教程
查看>>
前后端俱全的 具有聊天功能的 react 项目
查看>>
Redux reselect
查看>>
Spring 通过xml获得容器的三种方法比较
查看>>
MySQL索引面试题
查看>>