5

1 像这样创建表

    创建表 oracle_connet_by_test (
    item_id NUMBER 主键,
    parent_id NUMBER,
    item_desc VARCHAR2(8));

    插入 oracle_connet_by_test 值(1、0、'AAA');
    插入 oracle_connet_by_test 值(2、0、'BBB');
    插入到 oracle_connet_by_test 值(3、1、'CCC');
    插入到 oracle_connet_by_test 值(4、2、'DDD');
    插入到 oracle_connet_by_test 值(5、1、'EEE');
    插入 oracle_connet_by_test 值(6、3、'FFF');
    插入 oracle_connet_by_test 值(7、3、'GGG');
    犯罪;

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

    SQL> 选择级别,
      2 ITEM_ID,
      3 PARENT_ID, LPAD(' ', 4 * (LEVEL - 1)) || ITEM_DESC 作为 ITEM_DESC
      4 来自 ORACLE_CONNET_BY_TEST
      5 以 parent_Id = 0 开始
      6 按之前的 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
             2 5 1 电子电气设备
             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 电子电气设备 1
             1 2 0 血脑屏障 2
             2 4 2 DDD 2
4

1 回答 1

7

使用 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
    ;
于 2012-07-19T11:28:11.147 回答