一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - Oracle通過遞歸查詢父子兄弟節點方法示例

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

2020-03-24 16:45dahaihh Oracle

這篇文章主要給大家介紹了關于Oracle如何通過遞歸查詢父子兄弟節點的相關資料,遞歸查詢對各位程序員來說應該都不陌生,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。

前言

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

方法如下:

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

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

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

?
1
2
3
4
5
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、查詢某節點所有父節點(所有祖宗節點)

?
1
2
3
4
select t.*
from SYS_ORG t
start with id = '401000501'
connect by prior parent_id = id

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

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

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

?
1
2
3
4
5
6
7
8
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、查詢某節點的父節點及兄弟節點(叔伯節點)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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將查詢出來的結果進行結合起來,形成結果集。

總結

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

原文鏈接:https://www.cnblogs.com/dahaihh-2018/p/8274617.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品久久久打桩机 | 国产成人亚洲精品乱码在线观看 | daring国家队在线观看樱花动漫 | 精品视频免费在线 | 美女的隐私无遮挡撒尿 | 免费一级毛片在线播放放视频 | 精品无人区麻豆乱码无限制 | 欧美人妖大啪啪 | 男人的天堂在线观看视频不卡 | 日韩伦理在线观看 | 国产一区二区三区免费在线视频 | 继的朋友无遮漫画免费观看73 | 手机在线观看精品国产片 | 国产私拍精品88福利视频 | 亚洲spank男男实践网站 | 国产综合视频在线 | 色小孩导航 | 34g污奶跳舞 | 操操综合网| 欧美日韩国产超高清免费看片 | 亚洲 欧美 日本 国产 高清 | 超91精品手机国产在线 | 成人观看免费观看视频 | 俺去啦最新| 国产精品久久久久久久久免费观看 | 日韩在线观看网址 | 91网红福利精品区一区二 | 美女舒服好紧太爽了视频 | 777奇米影视一区二区三区 | 午夜精品久久久久久久2023 | 婷婷去我也去 | 国产麻豆精品入口在线观看 | 久久免费观看视频 | www.尤物视频 | 9自拍视频在线观看 | 九九热在线观看视频 | 小辣椒精品福利视频导航 | 日本在线观看免费高清 | 青青青手机在线视频 | 秋葵丝瓜茄子草莓榴莲樱桃 | 国产福利一区二区三区 |