oracle 遞歸查詢 CONNECT BY、START WITH、CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、SYS_CONNECT_BY_PATH

轉載自:http://blog.csdn.net/feier7501/article/details/21815691

 

創建表,初始化數據;

  1. CREATE TABLE TB_COMPANY  
  2. (  
  3.   COMPANY_ID INTEGER PRIMARY KEY,  
  4.   COMPANY VARCHAR2(256),  
  5.   UP_COMPANYID INTEGER  
  6. );  
  7.   
  8. INSERT INTO TB_COMPANY VALUES (0, '總公司'NULL);  
  9. INSERT INTO TB_COMPANY VALUES (1, '北京分公司', 0);  
  10. INSERT INTO TB_COMPANY VALUES (2, '上海分公司', 0);  
  11. INSERT INTO TB_COMPANY VALUES (3, '海淀區分部', 1);  
  12. INSERT INTO TB_COMPANY VALUES (4, '東城區分部', 1);  
  13. INSERT INTO TB_COMPANY VALUES (5, '黃埔區分部', 2);  
  14. INSERT INTO TB_COMPANY VALUES (6, '靜安區分部', 2);  
  15. COMMIT;  
CREATE TABLE TB_COMPANY
(
  COMPANY_ID INTEGER PRIMARY KEY,
  COMPANY VARCHAR2(256),
  UP_COMPANYID INTEGER
);

INSERT INTO TB_COMPANY VALUES (0, '總公司', NULL);
INSERT INTO TB_COMPANY VALUES (1, '北京分公司', 0);
INSERT INTO TB_COMPANY VALUES (2, '上海分公司', 0);
INSERT INTO TB_COMPANY VALUES (3, '海淀區分部', 1);
INSERT INTO TB_COMPANY VALUES (4, '東城區分部', 1);
INSERT INTO TB_COMPANY VALUES (5, '黃埔區分部', 2);
INSERT INTO TB_COMPANY VALUES (6, '靜安區分部', 2);
COMMIT;


全部數據:



遞歸查詢SQL:

  1. SELECT (RPAD(' ', 2*(LEVEL-1), '-' ) || COMPANY) COMPANY_NAME, CONNECT_BY_ROOT COMPANY, CONNECT_BY_ISLEAF, LEVEL , SYS_CONNECT_BY_PATH(COMPANY, '/')  
  2. FROM TB_COMPANY  
  3. START WITH UP_COMPANYID IS NULL  
  4. CONNECT BY PRIOR COMPANY_ID = UP_COMPANYID;  
SELECT (RPAD(' ', 2*(LEVEL-1), '-' ) || COMPANY) COMPANY_NAME, CONNECT_BY_ROOT COMPANY, CONNECT_BY_ISLEAF, LEVEL , SYS_CONNECT_BY_PATH(COMPANY, '/')
FROM TB_COMPANY
START WITH UP_COMPANYID IS NULL
CONNECT BY PRIOR COMPANY_ID = UP_COMPANYID;


結果:



說明:

1. CONNECT_BY_ROOT 返回當前節點的最頂端節點 
2. CONNECT_BY_ISLEAF 判斷是否爲葉子節點,如果這個節點下面有子節點,則不爲葉子節點 
3. LEVEL 僞列表示節點深度 
4. SYS_CONNECT_BY_PATH函數顯示詳細路徑,並用“/”分隔


遞歸查詢SQL:

  1. SELECT * FROM TB_COMPANY START WITH COMPANY_ID = 1 CONNECT BY PRIOR COMPANY_ID = UP_COMPANYID;  
SELECT * FROM TB_COMPANY START WITH COMPANY_ID = 1 CONNECT BY PRIOR COMPANY_ID = UP_COMPANYID;


結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章