ORACLE CONNECT_BY_ROOT

来源:互联网 发布:王者荣耀淘宝cdk抽奖 编辑:程序博客网 时间:2024/06/16 12:48

在10g中 Oracle提供了新的操作: CONNNECT_BY_ROOT,通过这个操作,可以获取树形查询根记录的字段。

这里描述一下在 9i中如何实现相应的功能。

 

首先还是构造一个例子:

 

 

[c-sharp] view plaincopy
  1. SQL> CREATE TABLE T_TREE (ID NUMBER PRIMARY KEY, FATHER_ID NUMBER, NAME VARCHAR2(30));  
  2.   
  3. 表已创建。  
  4.   
  5. SQL> INSERT INTO T_TREE VALUES (1, 0, 'A');  
  6.   
  7. 已创建 1 行。  
  8.   
  9. SQL> INSERT INTO T_TREE VALUES (2, 1, 'BC');  
  10.   
  11. 已创建 1 行。  
  12.   
  13. SQL> INSERT INTO T_TREE VALUES (3, 1, 'DE');  
  14.   
  15. 已创建 1 行。  
  16.   
  17. SQL> INSERT INTO T_TREE VALUES (4, 1, 'FG');  
  18.   
  19. 已创建 1 行。  
  20.   
  21. SQL> INSERT INTO T_TREE VALUES (5, 2, 'HIJ');  
  22.   
  23. 已创建 1 行。  
  24.   
  25. SQL> INSERT INTO T_TREE VALUES (6, 4, 'KLM');  
  26.   
  27. 已创建 1 行。  
  28.   
  29. SQL> INSERT INTO T_TREE VALUES (7, 6, 'NOPQ');  
  30.   
  31. 已创建 1 行。  
  32.   
  33. SQL> COMMIT;  
  34.   
  35. 提交完成。  
  36.   
  37. SQL> SELECT * FROM T_TREE;  
  38.   
  39. ID FATHER_ID NAME  
  40. ---------- ---------- ------------------------------  
  41. 1 0 A  
  42. 2 1 BC  
  43. 3 1 DE  
  44. 4 1 FG  
  45. 5 2 HIJ  
  46. 6 4 KLM  
  47. 7 6 NOPQ  
  48.   
  49. 已选择 7行。  

下面看看 CONNECT_BY_ROOT的功能:

 

[c-sharp] view plaincopy
  1. SQL> SELECT ID, FATHER_ID, NAME, CONNECT_BY_ROOT(NAME) ROOT_NAME  
  2. 2 FROM T_TREE  
  3. 3 START WITH FATHER_ID = 0  
  4. 4 CONNECT BY PRIOR ID = FATHER_ID;  
  5.   
  6. ID FATHER_ID NAME ROOT_NAME  
  7. ---------- ---------- ---------- ----------  
  8. 1 0 A A  
  9. 2 1 BC A  
  10. 5 2 HIJ A  
  11. 3 1 DE A  
  12. 4 1 FG A  
  13. 6 4 KLM A  
  14. 7 6 NOPQ A  
  15.   
  16. 已选择 7行。  
  17.   
  18.   
  19.   
  20. SQL> SELECT ID, FATHER_ID, NAME,   
  21. 2 CONNECT_BY_ROOT(NAME) ROOT_NAME, CONNECT_BY_ROOT(ID) ROOT_ID  
  22. 3 FROM T_TREE  
  23. 4 START WITH ID = 7  
  24. 5 CONNECT BY PRIOR FATHER_ID = ID;  
  25.   
  26. ID FATHER_ID NAME ROOT_NAME ROOT_ID  
  27. ---------- ---------- ---------- ---------- ----------  
  28. 7 6 NOPQ NOPQ 7  
  29. 6 4 KLM NOPQ 7  
  30. 4 1 FG NOPQ 7  
  31. 1 0 A NOPQ 7  
0 0
原创粉丝点击