oracle 根據節點id遞迴查詢全部的父節點(轉載)
本文轉載自https://blog.csdn.net/BondChenJ/article/details/78581625
1、適用狀況:blog
適用樹狀結構資料,例如包含id,parent_id欄位的資料表 ,表中資料能夠經過某些欄位找到其中的父子關係。遞迴
2、語法:get
select * from 表名 start with 條件1 connnect by 條件2 where 條件3it
一、舉例:io
(1)經過父ID查詢全部子節點select
select * from group_info start with parent_group_id='0' connect by prior group_id=parent_group_id語法
(2)經過子ID查詢全部父節點資料
select * from group_info start with group_id='61' connect by prior parent_group_id=group_id查詢
二、說明:
(1)start with 後面的條件表示遞迴從哪裡開始。
select * from group_info start with parent_group_id='0' connect by prior group_id=parent_group_id 從父編號為0的資料開始查
select * from group_info start with group_id='0' connect by prior group_id=parent_group_id 從編號為0的資料開始查
顯然在須要查詢父節點為0的全部子節點時,第二條查詢語句會包含父節點。
(2)connect by 條件2 表示 遞迴時先後兩條資料是以條件2來建立聯絡的
(3)prior的位置決定了遞迴時的具體關係或者說是決定了查詢時的檢索順序。
prior 欄位1=欄位2 能夠理解為當前節點的欄位1等於下一個節點的欄位2
select * from group_info start with group_id='5' connect by parent_group_id= prior group_id
能夠理解為 當前節點的group_id 是下一個節點的parent_group_id ,也就是查詢 父節點下的全部子節點
(當前這條記錄的group_id =下一條記錄的parent_group_id )
select * from group_info start with group_id='5' connect by prior parent_group_id= group_id
能夠理解為當前節點的parent_group_id 是下一個節點的group_id ,也就是查詢子節點的全部父節點
(4)level關鍵字表示層次
可經過level 關鍵字表示查詢結果所在層次,根節點的層號為1
select g.* , level from group_info g start with parent_group_id=0 connect by prior group_id=parent_group_id
凡哥,別他媽吹牛逼了