start with 查詢組織樹關係

2021-09-01 22:52:30 字數 1387 閱讀 6161

中的start with  ...  connect by prior字句:

一,基本的使用語法:

select * from tablename           

start with 條件1

connect by 條件2

where 條件3;

條件1:是根節點的限定語句,當然可以放寬限定條件,以取得多個根節點,也就是多棵樹;在連線關係中,除了可以使用列明外,還允許使用列表示式。

start with 子句為可選項,用來標識哪個節點作為查詢樹形結構的根節點。若該子句省略,則表示所有滿足查詢條件的行作為根節點。

條件2:是連線條件,其中用prior表示上一條記錄,例如connect by prior student_id = grade_id,意思就是上一條記錄的student_id是本條記錄

的grade_id,即本記錄的父親是上一條記錄。connect by子句說明每行資料將是按照層次順序檢索,並規定將表中的資料連入樹形結構的關係中。

prior運算子必須放置在連線關係的2列中某乙個的前面。對於節點間的父子關係,prior運算子在一側表示父節點,在另一側表示子節點,從而確定查

找樹結構的順序是自頂向下,還是自底向上。

條件3:是過濾條件,用於對返回的記錄進行過濾。

1,定義查詢起始節點

在自頂向下查詢樹狀結構時,不但可以從根節點開始,還可以定義任何節點為起始節點,以此開始,向下查詢。這樣查詢的結果就是以該節點為開始

的結構是樹的一枝。

二、示例:

在我們專案中是做乙個獲取部門組織樹,下面是sql語句,在start with條件中是根據父節點為0的根結點獲取所有的組織結構,如:

select

mdm_code as mdmcode,

name as name,

pk_departmentid as pkdepartmentid,

pk_fatherorg as pkfatherorg

from

oms_sys_dept_info start with mdm_code = # connect by prior pk_departmentid =pk_fatherorg

注:在prior再練個列字段的最前面表示從根結點開始,從上到下查詢。如上面所示。

如果是connect by pk_departmentid = prior pk_fatherorg這種,則表示從下到上查詢。

三,應用場景

start with... connect by prior...常見的用法,是用來遍歷含有父子關係的表結構中。比如省市關係,乙個省

下面包含多個城市,如果城市基本資訊表中,包含有屬於哪個省級的字段,那麼如果要遍歷所有的城市,我們就可以

使用start with... connect by prior...。

sql語句遞迴查詢(start with)

在做專案中遇到乙個問題,就是同乙個表中的資料存在級聯關係,但是只要查出來的末級資料,糾結了好久,好不容易找到了乙個博主的分享,在這裡做個記錄,也是和大家一起分享學習一下這位大神的技術,共勉 寫 時碰到要弄清楚oracle的role之間的傳遞關係,就是有role a的話,可以通過grant a to ...

sql語句遞迴查詢(start with)

在做專案中遇到乙個問題,就是同乙個表中的資料存在級聯關係,但是只要查出來的末級資料,糾結了好久,好不容易找到了乙個博主的分享,在這裡做個記錄,也是和大家一起分享學習一下這位大神的技術,共勉 寫 時碰到要弄清楚oracle的role之間的傳遞關係,就是有role a的話,可以通過grant a to ...

組織機構樹查詢

組織機構樹遞迴查詢 查詢父級節點的所有子節點 select organizational id,organizational name,parent id from sys organizational where is used 1 start with parent id 父級節點id conn...