繁体   English   中英

如何通过sql获取oracle connect中的最终父id列

[英]How to get the final parent id column in oracle connect by sql

1像这样创建表

CREATE TABLE oracle_connet_by_test (
    item_id NUMBER PRIMARY KEY,
    parent_id NUMBER,
    item_desc VARCHAR2(8));

    INSERT INTO oracle_connet_by_test VALUES(1, 0, 'AAA');
    INSERT INTO oracle_connet_by_test VALUES(2, 0, 'BBB');
    INSERT INTO oracle_connet_by_test VALUES(3, 1, 'CCC');
    INSERT INTO oracle_connet_by_test VALUES(4, 2, 'DDD');
    INSERT INTO oracle_connet_by_test VALUES(5, 1, 'EEE');
    INSERT INTO oracle_connet_by_test VALUES(6, 3, 'FFF');
    INSERT INTO oracle_connet_by_test VALUES(7, 3, 'GGG');
    commit;

2当我运行此脚本时,输出将是

SQL> SELECT LEVEL,
      2         ITEM_ID,
      3         PARENT_ID, LPAD(' ', 4 * (LEVEL - 1)) || ITEM_DESC AS ITEM_DESC
      4    FROM ORACLE_CONNET_BY_TEST
      5   START WITH parent_Id = 0
      6  CONNECT BY PRIOR ITEM_ID = PARENT_ID
      7  ;

         LEVEL    ITEM_ID  PARENT_ID ITEM_DESC
    ---------- ---------- ---------- -----------
             1          1          0 AAA
             2          3          1     CCC
             3          6          3         FFF
             3          7          3         GGG
             2          5          1     EEE
             1          2          0 BBB
             2          4          2     DDD

3问题:如果我想要这个结果,我该如何编写代码?

LEVEL    ITEM_ID  PARENT_ID ITEM_DESC        SUPER_ID
    ---------- ---------- ---------- ---------------- ----------
             1          1          0 AAA              1
             2          3          1     CCC          1
             3          6          3         FFF      1
             3          7          3         GGG      1
             2          5          1     EEE          1
             1          2          0 BBB              2
             2          4          2     DDD          2

使用connect_by_root:

SELECT LEVEL,
           ITEM_ID,
           PARENT_ID, LPAD(' ', 4 * (LEVEL - 1)) || ITEM_DESC AS ITEM_DESC
           , connect_by_root item_id  AS SUPER_ID
      FROM ORACLE_CONNET_BY_TEST
     START WITH parent_Id = 0
    CONNECT BY PRIOR ITEM_ID = PARENT_ID
    ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM