oracle处理节点之间的父子关系
通常当与树的结构之间的关系处理,这是一个很复杂的事情,我们可以通过程序代码去逐层遍历父或子节点,这样做的缺点是很明显,效率不高,操作复杂性是比较大的。而当我们使用Oracle当数据库,我们可以有一个简单的解决方法,例如下列:
1.首先创建一张表。保存父子关系
drop table tmp_node;
create table tmp_node(id varchar2(500),p_id varchar2(500));
2.向表中插入数据
insert into tmp_node(p_id,id) values(null,1);
insert into tmp_node(p_id,id) values(1,'1-1');
insert into tmp_node(p_id,id) values(1,'1-2');
insert into tmp_node(p_id,id) values('1-1','1-1-1');
insert into tmp_node(p_id,id) values('1-1','1-1-2');
insert into tmp_node(p_id,id) values('1-2','1-2-1');
3.查看表中数据
select * from tmp_node;
编号 |
P_ID |
ID |
1 |
1 |
|
2 |
1 |
1-1 |
3 |
1 |
1-2 |
4 |
1-1 |
1-1-1 |
5 |
1-1 |
1-1-2 |
6 |
1-2 |
1-2-1 |
4.创建视图(这一步最重要)
create or replace view tmp_node_view as
select distinct level lvl,connect_by_root(id) leaf_id,t.*
from tmp_node t
connect by prior t.p_id = t.id;
5.查看视图数据
select * form tmp_node_view order by leaf_id,lvl;
编号 |
LVL |
LEAF_ID |
ID |
P_ID |
1 |
1 |
|||
2 |
1 |
1-1 |
1-1 |
1 |
3 |
2 |
1-1 |
||
4 |
1 |
1-1-1 |
1-1-1 |
1-1 |
5 |
2 |
1-1-1 |
1-1 |
1 |
6 |
3 |
1-1-1 |
||
7 |
1 |
1-1-2 |
1-1-2 |
1-1 |
8 |
2 |
1-1-2 |
1-1 |
1 |
9 |
3 |
1-1-2 |
||
10 |
1 |
1-2 |
1-2 |
1 |
11 |
2 |
1-2 |
||
12 |
1 |
1-2-1 |
1-2-1 |
1-2 |
13 |
2 |
1-2-1 |
1-2 |
1 |
14 |
3 |
1-2-1 |
6.使用说明
主要使用的leaf_id和id两个字段的值。
字段说明:lvl字段代表节点的深度,leaf_id代表叶节点。
p_id父节点id。id节点本生id。
当须要知道一个节点有哪些父节点的时候,仅仅须要依据leaf_id,查询id字段就可以:
select * from tmp_node_view where leaf_id = '1-2-1';
编号 |
LVL |
LEAF_ID |
ID |
P_ID |
1 |
1 |
1-2-1 |
1-2-1 |
1-2 |
2 |
3 |
1-2-1 |
1 |
|
3 |
2 |
1-2-1 |
1-2 |
1 |
当须要知道一个节点有哪些子节点的时候。仅仅须要依据id查询leaf_id就可以:
select * from tmp_node_view where id = '1-2';
编号 |
LVL |
LEAF_ID |
ID |
P_ID |
1 |
1 |
1-2 |
1-2 |
1 |
2 |
2 |
1-2-1 |
1-2 |
1 |
注意:发现所有的父母和孩子节点。包括自身节点是。
版权声明:本文博主原创文章,博客,未经同意不得转载。
oracle处理节点之间的父子关系的更多相关文章
- Unity3D深入浅出 -组件与节点之间的调用关系
一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,D ...
- xpath 轴,节点之间的关系
http://www.w3school.com.cn/xpath/xpath_axes.asp http://www.freeformatter.com/xpath-tester.html 测试 轴可 ...
- Logstash 父子关系 配置
最近在使用Lostash的过程中遇到了一个问题:在一个log文件里包含两类数据,而且两类数据之间存在父子关系,那如何使用lostash的configuration实现这个需求呢 思路: 首先定义父事件 ...
- JavaScript---网络编程(7)-Dom模型(节点间的层次关系,节点的增、删、改)
利用节点间的层次关系获取节点: 上一节讲了3中获取的方式: * ※※一.绝对获取,获取元素的3种方式:-Element * 1.getElementById(): 通过标签中的id属性值获来取该标签对 ...
- Python设计模式 - 基础 - 类/接口之间的六种关系
在程序中需要把世间万物抽象成相应的类,现实世界中物与物之间的关系和程序中类与类之间的关系相对应,因为世间万物是普遍联系的,所以程序中类与类之间也不是孤立的.在系统分析和框架设计中,根据面向对象机制的三 ...
- vue-自主研发非父子关系组件之间通信的问题
相信很多人都知道解决组件间通信:vuex,今天的主角不是它. element-ui里解决组件间通信的思路:emitter.js ,但是如果你拿来你会发现它解决的是父子组件之间的通信问题.如果我们通信的 ...
- SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数
---SQL SERVER 2000 遍历父子关系數據表(二叉树)获得所有子节点 所有父节点及节点层数函数---Geovin Du 涂聚文--建立測試環境Create Table GeovinDu([ ...
- Vue 组件&组件之间的通信 之 非父子关系组件之间的通信
Vue中不同的组件,即使不存在父子关系也可以相互通信,我们称为非父子关系通信: 我们需要借助一个空Vue实例,在不同的组件中,使用相同的Vue实例来发送/监听事件,达到数据通信的目的: 实例: 初始加 ...
- oracle 父子关系
语句递归查找父子关系语句 表结构及数据 1.通过根节点遍历子节点 select t.*,LEVEL from Test2 t START WITH t.parentid=0 CONNECT BY PR ...
随机推荐
- 解决mysqldb查询大量数据导致内存使用过高的问题
1.源码 connection=MySQLdb.connect( host="thehost",user="theuser", passwd="the ...
- Ubuntu在构建Robotframework+Selenium周围环境
最近经历了从Windows进入系统Ubuntukylin下列.因此,测试工具也需要被重新安装,今天和共享安装过程. 我用的是环境:Ubuntu Kylin 14.04 64Bit系统. 启动权,首先, ...
- HDU 1815, POJ 2749 Building roads(2-sat)
HDU 1815, POJ 2749 Building roads pid=1815" target="_blank" style="">题目链 ...
- WdatePicker日期不能弹出框
发育.在引用WdatePicker当日历控件,正确的路径.日历控件封装完整,在正常情况下的代码,调试正常,但公告日期后不能弹出框,最终核实后想办法找到一个解决方案: 更改方法:于WdatePicker ...
- Unity3D-RPG项目实战(1):发动机的特殊文件夹
前言 从8月份開始.下定决心正式開始学习Unit3D啦.尽管自己写过两代端游引擎,被应用的项目也超过10个,Unreal Engine也搞过几年,只是做手游.哥确实还是个新手.Unity3D这个引擎我 ...
- POJ 2828 Buy Tickets(排队问题,线段树应用)
POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意: 排队买票时候插队. 给出一些数对,分别代表某个人的想要插入的位 ...
- jQuery Mobile发展新闻阅读器,适应iphone和android打电话
程序猿是很不赖,你知道. 我们经常新浪,腾讯.雅虎等各大网站看到上述新闻.他们还推出了自己的移动新闻阅读器.今天,我自己用的jQuery Mobile 为了实现这一功能,.图像大小上传限制的大小250 ...
- Cocos2d-iPhone V3 (1) 其基本程序常用的行动框架和介绍
Cocos2d-iPhone V3 (1) 其基本程序常用的行动框架和介绍 博客:http://blog.csdn.net/prevention 笔者:犀利哥 - 第一部分:一个 Cocos2d-iP ...
- Java拾遗(一):浅析Java子类和父类的实例化顺序 及 陷阱
本文主要介绍Java里经常使用的子类和父类的变量实例化顺序及陷阱,并结合一个Android实例来探讨此问题.日后编程中应尽量避免此陷阱. 首先看以下一段代码: 定义一个虚类Server.java pa ...
- Sqlserver 高并发和大数据存储方案
Sqlserver 高并发和大数据存储方案 随着用户的日益递增,日活和峰值的暴涨,数据库处理性能面临着巨大的挑战.下面分享下对实际10万+峰值的平台的数据库优化方案.与大家一起讨论,互相学习提高! ...