Oracle資料庫之層次化查詢

2021-08-20 17:08:42 字數 1537 閱讀 4191

--基本查詢

select id,c_mmcode,c_mmroomname,c_parentid from s_mmroom;

--層次化查詢

select id,c_mmcode,c_mmroomname,c_parentid from s_mmroom

start with c_parentid='0' connect by prior id = c_parentid;

--使用level節點

select level,id,c_mmcode,c_mmroomname,c_parentid from s_mmroom

start with c_parentid='0' connect by prior id = c_parentid;

--查詢層次數

select count(distinct level) from s_mmroom

start with c_parentid='0' connect by prior id = c_parentid;

---查詢結果的層次化

select level,lpad(' ',2*level-1)||' '||c_mmcode||' '||c_mmroomname,c_parentid from s_mmroom

start with c_parentid='0' connect by prior id = c_parentid;

--從非根節點開始遍歷

select level,lpad(' ',2*level-1)||' '||c_mmcode||' '||c_mmroomname,c_parentid from s_mmroom

start with c_parentid='00000000000000000000000000000000' connect by prior id = c_parentid;

--在start with中使用子查詢  下面這個查詢使用子查詢來選擇指定節點的。然後傳給start with子句。

select level,lpad(' ',2*level-1)||' '||c_mmroomname from s_mmroom

start with c_parentid=(select id from s_mmroom where c_mmroomname like '%中國船級社%')

connect by prior id =c_parentid;

--從下向上遍歷樹  不一定非要按照從父節點到子節點的順序從上至下遍歷樹;也可以從某個子節點開始,從下而上遍歷。實現的方法是交換父節點和子節點在connect by prior子句中的順序

select level,lpad(' ',2*level-1)||' '||c_mmroomname from s_mmroom

start with c_parentid='00000000000000000000000000000000' connect by prior id = c_parentid;

--從層次化查詢中刪除節點和分支   略 表名後面加where

--在層次化查詢中加入其它條件      略 表名後面加where

oracle 層次化查詢

1 層次化查詢 層次化 同一資料庫表中多條資料存在父子關係,形成樹狀結構。利用connect by 進行層次化查詢 按照某種規則,獲得節點路徑上的節點集合。如 select from market b start with b m id 10 b connect by prior b p id m ...

Oracle 層次化查詢

create table employees employee id integer constraint employees pk primary key,manager id integer constraint employees fk employees references employe...

Oracle層次化查詢(新)

今天要通過乙個組織機構樹通過得到機構編號向上得到所有的父級機構的使用者列表。怎麼辦,肯定是用層次化查詢了。記得原來的文章裡邊有帖子。黏貼過來。結果發現會報錯 ora 01436 這個是因為父節點和子節點有鏈結上的錯誤,可能會出現迴圈。就是父節點的父節點又鏈結到子節點一樣,有死迴圈 後來沒辦法。最後再...