oracle處理父子節點關係

2021-07-03 04:19:36 字數 2095 閱讀 1898

平時在處理樹形結構的關係的時候,是乙個很複雜的事情,我們可能通過程式**去一層一層的遍歷父節點或者子節點,這樣做的缺點很明顯,效率不高而且操作複雜度比較大。而當我們在使用

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_idid1

1211-131

1-24

1-11-1-1

51-1

1-1-2

61-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;編號

lvlleaf_id id

p_id11

1 1

211-1

1-1 13

21-1 1

411-1-1

1-1-1

1-152

1-1-1

1-1 1

631-1-1 1

711-1-2

1-1-2

1-182

1-1-2

1-1 1

931-1-2 1

1011-2

1-2 1

1121-2 1

1211-2-1

1-2-1

1-2132

1-2-1

1-2 1

1431-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';編號

lvlleaf_id

idp_id11

1-2-1

1-2-1

1-22

31-2-113

21-2-1

1-21

當需要知道乙個節點有哪些子節點的時候,只需要根據id查詢leaf_id即可:

select * from tmp_node_view where id = '1-2';編號

lvlleaf_id

idp_id11

1-21-212

21-2-1

1-21

注意:所有的父節點和子節點的查詢,都是包含自身節點的。使能在oracle資料庫中使用哦.

oracle處理父子節點關係

平時在處理樹形結構的關係的時候,是乙個很複雜的事情,我們可能通過程式 去一層一層的遍歷父節點或者子節點,這樣做的缺點很明顯,效率不高而且操作複雜度比較大。而當我們在使用 oracle 資料庫的時候,我們可以有一種簡單解決方法,如下 1.首先建立一張表,儲存父子關係 drop table tmp no...

oracle處理節點之間的父子關係

通常當與樹的結構之間的關係處理,這是乙個很複雜的事情,我們可以通過程式 去逐層遍歷父或子節點,這樣做的缺點是很明顯,效率不高,操作複雜性是比較大的。而當我們使用oracle當資料庫,我們可以有乙個簡單的解決方法,例如下列 1.首先建立一張表。儲存父子關係 drop table tmp node cr...

父子節點多級關係匯入時的處理

本文以excel形式匯入 在excel中初始化需要匯入的資料,子節點名稱比父節點名稱前多2個空格,代表父子關係 將excel匯入,在後台解析,如下 public listcovertsheettolist sheet sheet,string modelid,string nodeid listno...