阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle处理节点之间的父子关系

178次阅读
没有评论

共计 1405 个字符,预计需要花费 4 分钟才能阅读完成。

通常当与树的结构之间的关系处理,这是一个很复杂的事情,我们可以通过程序代码去逐层遍历父或子节点,这样做的缺点是很明显,效率不高,操作复杂性是比较大的。而当我们使用 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

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

  更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-11/137318.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1405字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中