天天看點

start with...connect by子句的淺用

start with的用法,其基本文法如下:

select … from tablename start with 條件1

connect by 條件2

where 條件3;

但是我在pl/sql中寫入以上格式的時候,竟然會報錯!于是将where子句放在了from子句後面就成功了。

要想用到此種查詢語句,就需要在表結構中設計一個子值字段和一個對應的父值字段。

select ... from ... start with...connect by的結果是将子項和父項查詢出來,按照樹狀結構存儲在一張表中。如果語句後面沒有加上order by條件,那麼查詢出來的結果是以樹的中序周遊的結果存儲在結果表中。

在這個文法中,出現了一個PRIOR關鍵字。其大緻用法如下:

select * from T_Role  where State!=-1 start with roleId='bbdb2f75' connect by prior roleId = parent_roleId order by idx       

從以上sql語句可以看出,start with後面跟的就是整棵樹的根節點。網上有很多對prior關鍵字的解釋不是很通俗易懂。按照我的了解,prior關鍵字在子值字段前面,那麼就需要查詢其子孫節點,也就是樹的自頂向下查詢;如果prior關鍵字在父值字段前面,那就是需要查詢根節點的祖先節點,也就是樹的自底向上查詢。這樣了解的确很通俗易懂,用起來也友善。上面這條sql語句就是要查詢根節點為"bbdb2f75"的子孫節點。roleId為子值字段,parent_roleId為父值子段。

轉載于:https://www.cnblogs.com/williamwsj/p/6970942.html