亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle通過遞歸查詢父子兄弟節點方法示例

發布時間:2020-10-25 12:55:35 來源:腳本之家 閱讀:222 作者:dahaihh 欄目:數據庫

前言

說到Oracle中的遞歸查詢語法,我覺得有一些數據庫基礎的童鞋應該都知道,做項目的時候應該也會用到,下面本文就來介紹下關于Oracle通過遞歸查詢父子兄弟節點的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

方法如下:

1、查詢某節點下所有后代節點(包括各級父節點)

 // 查詢id為101的所有后代節點,包含101在內的各級父節點
 select t.* from SYS_ORG t start with id = '101' connect by parent_id = prior id

2、查詢某節點下所有后代節點(不包含各級父節點)

select t.*
 from SYS_ORG t
 where not exists (select 1 from SYS_ORG s where s.parent_id = t.id)
 start with id = '101'
connect by parent_id = prior id

3、查詢某節點所有父節點(所有祖宗節點)

 select t.*
 from SYS_ORG t
 start with id = '401000501'
 connect by prior parent_id = id

4、查詢某節點所有的兄弟節點(親兄弟)

 select * from SYS_ORG t
 where exists (select * from SYS_ORG s where t.parent_id=s.parent_id and s.id='401000501')

5、查詢某節點所有同級節點(族節點),假設不設置級別字段

with tmp as(
  select t.*, level leaf  
  from SYS_ORG t    
  start with t.parent_id = '0'  
  connect by t.parent_id = prior t.id)
select *        
  from tmp        
where leaf = (select leaf from tmp where id = '401000501');

這里使用兩個技巧,一個是使用了level來標識每個節點在表中的級別,還有就是使用with語法模擬出了一張帶有級別的臨時表

 6、查詢某節點的父節點及兄弟節點(叔伯節點)

with tmp as(
 select t.*, level lev
 from SYS_ORG t
 start with t.parent_id = '0'
 connect by t.parent_id = prior t.id) 
select b.*
from tmp b,(select *
   from tmp
   where id = '401000501' and lev = '2') a
where b.lev = '1'
union all
select *
from tmp
where parent_id = (select distinct x.id
    from tmp x, --祖父
      tmp y, --父親
      (select *
      from tmp
      where id = '401000501' and lev > '2') z --兒子
    where y.id = z.parent_id and x.id = y.parent_id);

這里查詢分成以下幾步。

首先,將全表都使用臨時表加上級別;

其次,根據級別來判斷有幾種類型,以上文中舉的例子來說,有三種情況:

(1)當前節點為頂級節點,即查詢出來的lev值為1,那么它沒有上級節點,不予考慮。

(2)當前節點為2級節點,查詢出來的lev值為2,那么就只要保證lev級別為1的就是其上級節點的兄弟節點。

(3)其它情況就是3以及以上級別,那么就要選查詢出來其上級的上級節點(祖父),再來判斷祖父的下級節點都是屬于該節點的上級節點的兄弟節點。

最后,就是使用union將查詢出來的結果進行結合起來,形成結果集。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诸暨市| 沙河市| 巴楚县| 安平县| 常熟市| 桦南县| 马边| 宾川县| 固始县| 托克托县| 波密县| 阳新县| 鄂托克旗| 阿图什市| 淅川县| 安塞县| 阳泉市| 耒阳市| 青河县| 隆尧县| 林州市| 桑植县| 衡南县| 湖口县| 祁门县| 长岛县| 望奎县| 鄂伦春自治旗| 阳江市| 汝州市| 南安市| 武安市| 久治县| 太保市| 郯城县| 陈巴尔虎旗| 肃宁县| 潮州市| 偃师市| 瑞丽市| 兴隆县|