ORACLE递归_ 树形遍历查询根节点、父节点、子节点_002
ORACLE遞歸_ 樹形遍歷查詢根節點、父節點、子節點_002
1、準備演示數據
創建表結構:
-- Create table create table Z_ORG( cid NUMBER, cname VARCHAR2(32), parent_id NUMBER, create_time DATE, org_level NUMBER ); -- Add comments to the table comment on table Z_ORG is'機構組織簡化表'; -- Add comments to the columns comment on column Z_ORG.cid is'主鍵ID'; comment on column Z_ORG.cname is'組織名稱'; comment on column Z_ORG.parent_id is'上級組織ID'; comment on column Z_ORG.create_time is'創建時間'; comment on column Z_ORG.org_level is'組織級別';錄入數據:
insert into z_org(cid,cname,parent_id,create_time,org_level) select 1,'地球',0,sysdate,1 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 2,'中國',1,sysdate,2 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 3,'上海直轄市',2,sysdate,3 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 4,'江蘇省',2,sysdate,3 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 5,'南京市',4,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 6,'蘇州市',4,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level)select 7,'無錫市',4,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 8,'虹口區',3,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 9,'浙江省',2,sysdate,3 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 10,'杭州市',9,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 11,'寧波市',9,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 12,'美國',1,sysdate,2 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 13,'加利福尼亞州',12,sysdate,3 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 14,'舊金山市',13,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level)select 15,'撒門市',13,sysdate,4 from dual;commit;2、遍歷根節點
1. select code1 from tablename 2. start with code2 3. connect by code3 4. where code4code2是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。
code3是連接條件,其中用prior表示上一條記錄,比如connect by prior id=parentid就是說上一條記錄的id是本條記錄的parent,即本記錄的父親是上一條記錄。
code4是過濾條件,用于對返回的所有記錄進行過濾。
prior和start with關鍵字是可選項:
prior運算符必須放置在連接關系的兩列中某一個的前面。**對于節點間的父子關系,prior運算符在一側表示父節點,在另一側表示子節點,從而確定查找樹結構是的順序是自頂向下還是自底向上。**在連接關系中,除了可以使用列名外,還允許使用列表達式。start with子句為可選項,用來標識哪個節點作為查找樹型結構的根節點。若該子句被省略,則表示所有滿足查詢條件的行作為根節點。
遍歷表,求得某一個節點的所有上級節點記錄,比如求得撒門市的上級組織,應該獲得加利福尼亞州,美國,地球這些記錄,如下所示:
遍歷求得根路徑字符串:
3、遍歷子節點
5. select code1 from tablename 6. start with code2 7. connect by code3 8. where code4code2是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。
code3是連接條件,其中用prior表示上一條記錄,比如connect by prior id=parentid就是說上一條記錄的id是本條記錄的parent,即本記錄的父親是上一條記錄。
code4是過濾條件,用于對返回的所有記錄進行過濾。
prior和start with關鍵字是可選項:
prior運算符必須放置在連接關系的兩列中某一個的前面。對于節點間的父子關系,prior運算符在一側表示父節點,在另一側表示子節點,從而確定查找樹結構是的順序是自頂向下還是自底向上。在連接關系中,除了可以使用列名外,還允許使用列表達式。
start with子句為可選項,用來標識哪個節點作為查找樹型結構的根節點。若該子句被省略,則表示所有滿足查詢條件的行作為根節點。
如下所示,prior偏向父節點,就往下查詢,查詢節點下面所有的子節點記錄:
如下所示,prior偏向子節點,就往下查詢,查詢節點下面所有的子節點記錄:
–從parentid到cid開始遞歸,并以parentid為主展示這條記錄
select t1.parentid, t1.cid, levelfrom test_category t1start with t1.parentid = 1 connect by prior t1.parentid = t1.cid;–從parentid到cid開始遞歸,并以parentid為主展示這條記錄
select t1.parentid, t1.cid, levelfrom test_category t1start with t1.cid = 1 connect by prior t1.parentid = t1.cid;–從parentid到cid開始遞歸,并以cid為主展示這條記錄
select t1.cid, t1.parentid, levelfrom test_category t1start with t1.parentid = 1 connect by t1.parentid = prior t1.cid;–從parentid到cid開始遞歸,并以cid為主展示這條記錄
select t1.cid, t1.parentid, levelfrom test_category t1start with t1.cid = 1 connect by t1.parentid = prior t1.cid;轉載地址:
https://blog.csdn.net/mchdba/article/details/52490664
總結
以上是生活随笔為你收集整理的ORACLE递归_ 树形遍历查询根节点、父节点、子节点_002的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flask jinja2 如何遍历新闻列
- 下一篇: 2013阿里笔试题