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

2021-09-07 02:41:08 字數 1925 閱讀 9357

通常當與樹的結構之間的關係處理,這是乙個很複雜的事情,我們可以通過程式**去逐層遍歷父或子節點,這樣做的缺點是很明顯,效率不高,操作複雜性是比較大的。而當我們使用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

id1-1

1-21-1

1-1-1

1-11-1-2

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

1 1-1

1-1

1-1 1

1-1-1

1-1-1

1-11-1-1

1-11-1-1 1

1-1-2

1-1-2

1-11-1-2

1-11-1-2 1

1-21-2

1-2 1

1-2-1

1-2-1

1-21-2-1

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

idp_id

1-2-1

1-2-1

1-21-2-1

1-2-1

1-2 當須要知道乙個節點有哪些子節點的時候。僅僅須要依據id查詢leaf_id就可以:

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

編號lvl

leaf_id

idp_id

1-21-2

1-2-1

1-2 注意:發現所有的父母和孩子節點。包括自身節點是。

oracle處理父子節點關係

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

oracle處理父子節點關係

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

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

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