Oracle 中遞歸樹級數據connect by prior 以及 使用 concat 和 || 拼接多級層級目錄

1.Oracle 中 connect by prior的用法:

層級查詢,用於查詢具有層級關係(樹狀結構)的數據(父子關係、僱傭關係)。

語法:

select [level]  ... from table_name

start with condition1

connect by condition2 [prior]

where condition3

說明:

level :代表着節點所在的層

prior : 一個運算符,可以放在等號前後,決定着查詢時的搜索順序

start with : 表示根節點

connect by :關鍵字,用於連接遞歸查詢的條件

prior和start with關鍵字是可選項
prior運算符必須放置在連接關係的兩列中某一個的前面。對於節點間的父子關係,prior運算符在一側表示父節點,在另一側表示子節點,從而確定查找樹結構是的順序是自頂向下還是自底向上。在連接關係中,除了可以使用列名外,還允許使用列表達式。
start with子句爲可選項,用來標識哪個節點作爲查找樹型結構的根節點。若該子句被省略,則表示所有滿足查詢條件的行作爲根節點。

eg:

SELECT id,
SUBSTR(SYS_CONNECT_BY_PATH(NAME,'-'),2) projName
FROM CONSTRUCTION_ENTITY
START WITH id='123456789'
CONNECT BY PRIOR ID=PARENT_ID;

sql結果:

10號線

10號線-邊坡防護工程

10號線-邊坡防護工程-排水工程

10號線-邊坡防護工程-排水工程-邊坡截水天溝

10號線-場坪工程-擋土牆工程-重力式擋牆-漿砌石護底

 

2.CONCAT( string1, string2 )用法

eg:

SELECT (
select concat(concat(concat(concat(concat(t4.name,'-'),t3.name||'-'),t2.name||'-'),t1.name||'-'),ce.name) from CONSTRUCTION_ENTITY t1 LEFT JOIN CONSTRUCTION_ENTITY t2 on t1.PARENT_ID=t2.id LEFT JOIN CONSTRUCTION_ENTITY t3 on t2.PARENT_ID=t3.id LEFT JOIN CONSTRUCTION_ENTITY t4 on t3.PARENT_ID=t4.id
WHERE t3.PARENT_ID=t4.id and t2.PARENT_ID=t3.id and t1.PARENT_ID=t2.id and ce.PARENT_ID=t1.id
) as projName
from CONSTRUCTION_ENTITY ce ;

sql拼接結果:10號線-場坪工程-排水隧洞-超前支護及加固-超前小導管

上面SQL說明:CONSTRUCTION_ENTITY中id和parent_id 是有關聯關係,拼接name屬性,實現樹級目錄間用“-”的拼接。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章