最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年01月14日 14:15:58   作者:dahaihh  
這篇文章主要給大家介紹了關(guān)于Oracle如何通過(guò)遞歸查詢(xún)父子兄弟節(jié)點(diǎn)的相關(guān)資料,遞歸查詢(xún)對(duì)各位程序員來(lái)說(shuō)應(yīng)該都不陌生,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

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

方法如下:

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

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

2、查詢(xún)某節(jié)點(diǎn)下所有后代節(jié)點(diǎn)(不包含各級(jí)父節(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、查詢(xún)某節(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、查詢(xún)某節(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、查詢(xún)某節(jié)點(diǎn)所有同級(jí)節(jié)點(diǎn)(族節(jié)點(diǎn)),假設(shè)不設(shè)置級(jí)別字段

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');

這里使用兩個(gè)技巧,一個(gè)是使用了level來(lái)標(biāo)識(shí)每個(gè)節(jié)點(diǎn)在表中的級(jí)別,還有就是使用with語(yǔ)法模擬出了一張帶有級(jí)別的臨時(shí)表

 6、查詢(xún)某節(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') 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);

這里查詢(xún)分成以下幾步。

首先,將全表都使用臨時(shí)表加上級(jí)別;

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Oracle如何通過(guò)表名查詢(xún)觸發(fā)器

    Oracle如何通過(guò)表名查詢(xún)觸發(fā)器

    這篇文章主要介紹了Oracle如何通過(guò)表名查詢(xún)觸發(fā)器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Windows Server 2012 安裝oracle11g(圖文教程)

    Windows Server 2012 安裝oracle11g(圖文教程)

    這篇文章主要介紹了Windows Server 2012 安裝oracle11g(圖文教程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Linux中Oracle啟動(dòng)偵聽(tīng)報(bào)錯(cuò)TNS:permission denied的解決方法

    Linux中Oracle啟動(dòng)偵聽(tīng)報(bào)錯(cuò)TNS:permission denied的解決方法

    這篇文章主要介紹了Linux中Oracle啟動(dòng)偵聽(tīng)時(shí)報(bào)錯(cuò)TNS:permission denied的解決方法,文中給出了詳細(xì)的解決方法,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-02-02
  • 深入oracle分區(qū)索引的詳解

    深入oracle分區(qū)索引的詳解

    本篇文章是對(duì)oracle分區(qū)索引進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • oracle索引總結(jié)

    oracle索引總結(jié)

    這篇文章要給大家介紹的是oracle索引,索引是數(shù)據(jù)庫(kù)對(duì)象之一,用于加快數(shù)據(jù)的檢索,類(lèi)似于書(shū)籍的索引。在數(shù)據(jù)庫(kù)中索引可以減少數(shù)據(jù)庫(kù)程序查詢(xún)結(jié)果時(shí)需要讀取的數(shù)據(jù)量,類(lèi)似于在書(shū)籍中我們利用索引可以不用翻閱整本書(shū)即可找到想要的信息。 感興趣的小伙伴可參考一下
    2021-09-09
  • oracle數(shù)據(jù)庫(kù)索引失效的問(wèn)題及解決

    oracle數(shù)據(jù)庫(kù)索引失效的問(wèn)題及解決

    本文總結(jié)了在Oracle數(shù)據(jù)庫(kù)中索引失效的一些常見(jiàn)場(chǎng)景,包括使用isnull、isnotnull、!=、<、>、函數(shù)處理、like前置%查詢(xún)以及范圍索引和等值索引同時(shí)存在等情況,通過(guò)實(shí)際的SQL查詢(xún)驗(yàn)證,展示了索引失效的原因,并給出了相應(yīng)的優(yōu)化建議
    2025-01-01
  • Oracle/SQL中TO_DATE函數(shù)詳細(xì)實(shí)例解析

    Oracle/SQL中TO_DATE函數(shù)詳細(xì)實(shí)例解析

    Oracle to_date()函數(shù)用于日期轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于Oracle/SQL中TO_DATE函數(shù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用oracle具有一定的參考解決價(jià)值,需要的朋友可以參考下
    2024-06-06
  • oracle關(guān)聯(lián)查詢(xún)報(bào)invalid number錯(cuò)誤的解決方法

    oracle關(guān)聯(lián)查詢(xún)報(bào)invalid number錯(cuò)誤的解決方法

    這篇文章主要介紹了oracle關(guān)聯(lián)查詢(xún)報(bào)invalid number錯(cuò)誤的解決方法,文中通過(guò)代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-09-09
  • oracle分區(qū)索引的失效和重建代碼示例

    oracle分區(qū)索引的失效和重建代碼示例

    這篇文章主要介紹了oracle分區(qū)的失效和重建代碼示例,小編覺(jué)得挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • sqlplus 命令登錄 Oracle數(shù)據(jù)庫(kù)的多種方法

    sqlplus 命令登錄 Oracle數(shù)據(jù)庫(kù)的多種方法

    這篇文章主要介紹了sqlplus 命令登錄 Oracle數(shù)據(jù)庫(kù)的兩種方法,方式一通過(guò)sql*plus 命令窗口,方式2:通過(guò) cmd 窗口,每種方式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09

最新評(píng)論

河源市| 漳平市| 万全县| 荥阳市| 塘沽区| 芦溪县| 渝北区| 五家渠市| 黎川县| 岐山县| 壶关县| 怀来县| 乌拉特后旗| 星座| 北票市| 大同市| 抚宁县| 石嘴山市| 安新县| 乌什县| 元谋县| 西吉县| 阿拉尔市| 察雅县| 正安县| 南城县| 隆回县| 双鸭山市| 沙河市| 屯昌县| 昭通市| 岳阳县| 彩票| 昭觉县| 奉化市| 德化县| 大庆市| 呈贡县| 晋江市| 图木舒克市| 巢湖市|