oracle處理父子節點關係

2021-09-02 04:25:42 字數 2391 閱讀 8417

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

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...