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屬性,實現樹級目錄間用“-”的拼接。