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


1


1


2


1


1-1


1-1


1


3


2


1-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


1


7


1


1-1-2


1-1-2


1-1


8


2


1-1-2


1-1


1


9


3


1-1-2


1


10


1


1-2


1-2


1


11


2


1-2


1


12


1


1-2-1


1-2-1


1-2


13


2


1-2-1


1-2


1


14


3


1-2-1


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

注意:发现所有的父母和孩子节点。包括自身节点是。

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-08-06 07:27:12

oracle处理节点之间的父子关系的相关文章

Unity3D深入浅出 -组件与节点之间的调用关系

一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,Directional Light节点,game_root节点,game_root节点下又有Cube子节点,Sphere子节点,组成game_scene场景树. 三.组件和节点 1.每个节点都有一个transform组件 2.每一个继承自MonoBehaviour的组件都有一个数据成员指向这个节点的t

QT窗口组件的父子关系

部分图文参考狄泰软件学院相关内容 1.QT对象间可以存在父子关系 (1)每一个对象都保存有它所有子对象的指针 (2)每一个对象都有一个指向其父对象的指针 2.当指定QT对象的父对象时 (1)其父对象会在对象链表中加入该对象的指针 (2)该对象会保存指向父对象的指针 3.当QT对象被销毁时 (1)将自己父对象的Chidrea_ List移除 (2)将自己的Children List中所有对象销毁 (3)利用QT对象间的父子关系可以构成对象树 (4)删除书中的节点会导致对应子树被销毁 注意:使用QT

Logstash 父子关系 配置

最近在使用Lostash的过程中遇到了一个问题:在一个log文件里包含两类数据,而且两类数据之间存在父子关系,那如何使用lostash的configuration实现这个需求呢 思路: 首先定义父事件的pattern,因为子事件不匹配父pattern,所以logstash会自动为子事件添加_grokparesefailure 标签.通过该标签即可知道当前事件是父事件还是子事件 使用filter->ruby生成document_id,并把它放到ruby全局变量中 ,这样子事件就可以访问到父事件的d

JavaScript---网络编程(7)-Dom模型(节点间的层次关系,节点的增、删、改)

利用节点间的层次关系获取节点: 上一节讲了3中获取的方式: * ※※一.绝对获取,获取元素的3种方式:-Element * 1.getElementById(): 通过标签中的id属性值获来取该标签对象 * 2.getElementsByName(): 通过标签中的name属性值来获取该标签对象集合 * 3.getElementsByTagName(): 通过标签名来获取该标签对象集合 现在来看看相对获取的方式: ※※二.相对获取(利用节点之间的层次关系),获取节点:-Node 1.父节点:pa

Python设计模式 - 基础 - 类与类之间的六种关系

在程序中需要把世间万物抽象成相应的类,现实世界中物与物之间的关系和程序中类与类之间的关系相对应,因为世间万物是普遍联系的,所以程序中类与类之间也不是孤立的.在系统分析和框架设计中,根据面向对象机制的三大特性:封装.继承.多态,归纳和扩展出类与类之间六种不同的关系: - 依赖关系Dependency: 在局部变量,方法的形参,或者对静态方法的调用中实现 - 关联关系Association: 在类的成员变量中实现,可以双向也可以单向 - 聚合关系Aggregation: 强关联,整体与部分的关系,但

Oracle Study之-AIX6.1构建主机之间的信任关系(ssh)

Oracle Study之-AIX6.1构建主机之间的信任关系(ssh)    在AIX环境下构建主机信任关系首选rsh,但在构建Oracle 11g RAC时需要ssh支持,以下文档介绍如何在AIX6.1下构建ssh的信任关系.    默认aix没有安装ssh软件包,首先要安装ssh软件包: 1.下载.解压软件包 [[email protected] ssh]#lsOpenSSH_5.8.0.6102.tar.Z  openssl-0.9.8.1802.tar.Z  ssh.txt 解压后通过

SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数

---SQL SERVER 2000 遍历父子关系數據表(二叉树)获得所有子节点 所有父节点及节点层数函数---Geovin Du 涂聚文--建立測試環境Create Table GeovinDu([ID] Int, fatherID Int, [Name] Varchar(10))Insert A Select 1, 0, '中国'Union All Select 2, 1, '广东'Union All Select 3, 1, '北京'Union All Select 4, 2, '深圳特区

js通用方法获取元素,节点父子关系查找

/* *通用方式来获取元素 * 1.通过id来获取元素document.getElementById('属性名') * 2.通过便签名来获取元素document.getElementsByTagName('属性名');得到的是一个数组 * 3.通过class属性来获取元素有兼容性问题document.getElementsByClassName('class属性名');得到是一个数组 * 4.通过name属性来获取元素存在兼容性问题document.getElementsByName('name

oracle 父子关系

语句递归查找父子关系语句 表结构及数据 1.通过根节点遍历子节点 select t.*,LEVEL from Test2 t START WITH t.parentid=0 CONNECT BY PRIOR t.id = t.parentid 2.通过子节点向根节点追溯 select t.*,LEVEL from Test2 t START WITH t.id='13' CONNECT BY PRIOR t.parentid = t.id 3.查找直接子节点(下一层) select t.*,LE