db2和oracle中的樹查詢(遞迴查詢)語句

2021-06-02 22:06:56 字數 1773 閱讀 4119

在db2和oracle中的對樹的遞迴查詢語句。

表結構:

create table  main_node (

mla_id               integer     not null        ,   //節點id

mla_rootid          integer,                      //根節點id

mla_parentid        integer,                      //父節點id

mla_name            varchar2(50),                //節點名稱

constraint p_mlaid primary key (mla_id) );

mla_id   mla_parentid  mla_rootid   mla_name

1           0                   0             父節點1     

2           1                   0            (父節點1的/)子節點1   

3            2                   0            (父節點1的/子節點1的/)孫子節點1

4           0                   0             父節點2     

5           4                   0            (父節點2的/)子節點1   

樹結構直觀圖:

根節點(0)

父節點1(1)

(父節點1的/)子節點1(2)  

(父節點1的/子節點1的/)孫子節點1(3)

父節點2(4)

(父節點2的/)子節點1(5)

語句要求的功能:實現給出乙個父節點id然後得到該父節點下的所有子節點的資訊db2 的查詢語句:

with  rpl (mla_parentid, mla_id, mla_name) as

(

select root.mla_parentid, root.mla_id, root.mla_name from main_node root where root.mla_id = ?

union  all

select child.mla_parentid, child.mla_id, child.mla_name from rpl parent, main_node child where parent.mla_parentid = child.mla_id

)

select distinct mla_parentid, mla_id, mla_name from rpl order by mla_parentid, mla_id, mla_name

讓我們研究這個查詢語句:

oracle的查詢語句:

select mla_parentid, mla_id, mla_name from main_node

start with mla_id=? connect by prior mla_id=mla_parentid

讓我們研究這個查詢語句:

db2查詢樹寫法

較oracle來說,db2的查詢樹寫法比較複雜,但是當你習慣以後,其實寫法也挺簡單的。db2要自己寫遞迴,沒有提供相應的函式 create table tree 例子 with rpl treesuperid,treeid,treename,level as select root.treesupe...

DB2中的高效查詢

1 確保在連線謂詞中使用等號 2 同時應盡可能使用not exists來代替not in,儘管二者都使用了not 不能使用索引而降低速度 not exists要比not in查詢效率更高。索引而降低速度 not exists要比not in查詢效率更高。3 同時應盡可能使用exists來代替in,儘...

DB2遞迴查詢

遞迴 sql 在 db2 中通過公共表表示式 cte,common table expression 來實現。遞迴 sql 由遞迴 cte 以及對遞迴 cte 結果的查詢組成。那什麼是遞迴 cte 呢?簡言之,如果 cte 中的 fullselect 在 from 子句中引用到 cte 本身,就是遞...