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