web-dev-qa-db-ja.com

親レコードと子レコードを取得するOracleクエリを作成する

以下のようなテーブル構造

 col1 | col2 | col3 | 
 1 |空|空| 
 2 | 1 | Xyz | 
 3 | 1 | abc | 
 4 | 2 | abc | 

Col2は、子レコードの親レコードを決定しています。

col3='abc'を検索して結果を取得すると、次のような結果が得られます。

 1 |空|空| 
 2 | 1 | Xyz | 
 3 | 1 | abc | 
 4 | 2 | abc | 

テーブル定義とサンプルデータ:

CREATE TABLE ForgeRock 
(
    id int, 
    Dependency varchar(7), 
    Prod varchar(55), 
    Prod2 varchar(22)
) ;

INSERT ALL
    INTO ForgeRock (id, Dependency, Prod, Prod2) 
        VALUES (1, '', '','')
    INTO ForgeRock (id, Dependency, Prod, Prod2) 
        VALUES (2, '1', 'Full','101')
    INTO ForgeRock (id, Dependency, Prod, Prod2) 
        VALUES (3, '1', 'Robust','101')
    INTO ForgeRock (id, Dependency, Prod, Prod2) 
        VALUES (4, '2', 'Robust','102') 
SELECT * FROM dual ;
1
Anjali Mishra

このような階層クエリは、CONNECT BYを使用して次のように記述できます。

SQL> set null "empty"
SQL> select id, dependency, prod, prod2 from forgerock
     connect by prior dependency = id start with prod2 = '102' order by level desc;

        ID DEPENDE PROD       PROD2
---------- ------- ---------- ----------------------
         1 empty   empty      empty
         2 1       Full       101
         4 2       Robust     102
1
Balazs Papp