麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle通過遞歸查詢父子兄弟節(jié)點(diǎn)方法示例

2024-08-29 14:00:58
字體:
供稿:網(wǎng)友

前言

說到Oracle中的遞歸查詢語法,我覺得有一些數(shù)據(jù)庫基礎(chǔ)的童鞋應(yīng)該都知道,做項(xiàng)目的時候應(yīng)該也會用到,下面本文就來介紹下關(guān)于Oracle通過遞歸查詢父子兄弟節(jié)點(diǎn)的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。

方法如下:

1、查詢某節(jié)點(diǎn)下所有后代節(jié)點(diǎn)(包括各級父節(jié)點(diǎn))

 // 查詢id為101的所有后代節(jié)點(diǎn),包含101在內(nèi)的各級父節(jié)點(diǎn) select t.* from SYS_ORG t start with id = '101' connect by parent_id = prior id

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

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、查詢某節(jié)點(diǎn)所有父節(jié)點(diǎn)(所有祖宗節(jié)點(diǎn))

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

4、查詢某節(jié)點(diǎn)所有的兄弟節(jié)點(diǎn)(親兄弟)

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

5、查詢某節(jié)點(diǎn)所有同級節(jié)點(diǎn)(族節(jié)點(diǎn)),假設(shè)不設(shè)置級別字段

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來標(biāo)識每個節(jié)點(diǎn)在表中的級別,還有就是使用with語法模擬出了一張帶有級別的臨時表

 6、查詢某節(jié)點(diǎn)的父節(jié)點(diǎn)及兄弟節(jié)點(diǎn)(叔伯節(jié)點(diǎn))

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') awhere b.lev = '1'union allselect *from tmpwhere 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);

這里查詢分成以下幾步。

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

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

(1)當(dāng)前節(jié)點(diǎn)為頂級節(jié)點(diǎn),即查詢出來的lev值為1,那么它沒有上級節(jié)點(diǎn),不予考慮。

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

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

最后,就是使用union將查詢出來的結(jié)果進(jìn)行結(jié)合起來,形成結(jié)果集。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到oracle教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美成人午夜一区二区三区 | 亚洲第一视频 | 日韩黄站| 91精品国产刺激国语对白 | 欧美a在线观看 | 成人性生活视频在线播放 | 一二区成人影院电影网 | 亚洲成人精品视频 | 亚洲小视频在线观看,com | 一级做a爱片久久毛片a高清 | 国产亚洲精品综合一区91 | 久草在线视频免费播放 | 午夜a狂野欧美一区二区 | 久草视频2 | 美国一级黄色毛片 | 亚洲网站在线 | 欧美激情猛片xxxⅹ大3 | 亚洲一区二区三区高清视频 | 亚洲成人免费网站 | 伊人av影院 | 亚州综合网 | 久久精品com | 久久久精品视频国产 | 亚洲午夜激情网 | 黄色大片在线免费看 | 日日操日日操 | a级毛片免费观看在线播放 日本aaa一级片 | 国产精品一品二区三区四区18 | 国产亚洲精品久久777777 | 午夜视频久久久 | 久久久久久久久浪潮精品 | 深夜福利久久久 | 成人黄视频在线观看 | 成人小视频免费在线观看 | 国产精品久久久久久久久久10秀 | 色综合久久久久综合99 | 亚洲国产精品久久久久婷婷老年 | 国产精品久久久久无码av | 99re色| 久久吊 | 成人男女激情免费视频 |