5

1 このようにテーブルを作成します

    CREATE TABLE oracle_connet_by_test (
    item_id NUMBER PRIMARY KEY,
    親 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');
    専念;

2 このスクリプトを実行すると、出力は次のようになります

    SQL> 選択レベル、
      2 ITEM_ID、
      3 PARENT_ID, LPAD(' ', 4 * (レベル - 1)) || ITEM_DESC AS ITEM_DESC
      4 ORACLE_CONNET_BY_TEST から
      5 親 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 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
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 に答える