1. 程式人生 > >Oracle查詢樹結構表

Oracle查詢樹結構表

11月最後一天,趕緊寫多一篇湊夠四篇

對於樹狀結構的表,即有記錄父節點或子節點的表,如果不知道到底有多少層級,Oracle有自帶的函式可以處理查詢

語法

select…start with… connect by …prior

select A from B where C = ‘D’
start with Id = ‘1’ connect by PreId = prior Id

prior代表的是父親的位置,如果是 connect by prior PreId = Id的話,證明PreId是父節點的屬性,反之,則代表Id是Prior的屬性

解析:
select語句查出來的結果再前,Id是標識碼,PreId是父節點的Id。
Start with 是開始的節點,此處起始節點Id為1

另外,由於查出來的都是單一層級的,不知道他的上一層級,或者是最高層級的結構。如果需要獲得每一層樹結構的某個屬性,可以用SYS_CONNECT_BT_PATH()函式獲取資訊
如:

SYS_CONNECT_BY_PATH (ZDDM, ‘/’) AS PATH,

這樣可以將每一個節點的ZDDM列,用’/’連線成字串,然後存在PATH中。
效果如下:
這裡寫圖片描述
層級不同,長度也不同
然後在用substr() 和 instr()來擷取操作字串。

實際操作,對於表:

這裡寫圖片描述

這是實際的表結構,有樹狀的層次關係

如果需要查“農用地”下的所有節點,可以用sql

select * from T_SJZD
start with bsm = ‘12953’
connect by SJZDBSM = prior bsm

結果如下
這裡寫圖片描述

最開頭的節點就沒了

網上找到更詳細的查詢方法,包括查親兄弟、族兄弟、叔伯父等節點的方法:
http://blog.csdn.net/lisheng19870305/article/details/53669460