平時在處理樹形結構的關係的時候,是乙個很複雜的事情,我們可能通過程式**去一層一層的遍歷父節點或者子節點,這樣做的缺點很明顯,效率不高而且操作複雜度比較大。而當我們在使用
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-11-1-2 6
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_id 1
1 11
2 1
1-1
1-1 1
3 2
1-1 1
4 11-1-1
1-1-1
1-1 5
21-1-1
1-1 1
6 31-1-1 1
7 1
1-1-2
1-1-2
1-1 8
21-1-2
1-1 1
9 31-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
21-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
11-2-1
1-2-1
1-2 2
31-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
11-2
1-2 1
2 21-2-1
1-2 1
注意:所有的父節點和子節點的查詢,都是包含自身節點的。
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...