sql >> データベース >  >> RDS >> Oracle

Oracle階層クエリ

    接続(および関数CONNECT_BY_ROOT)を使用すると、目的の結果を得ることができます。 ルートノードの列値を返します):

    SQL> WITH users AS (
      2     SELECT 1 user_id, (null) PARENT FROM dual
      3     UNION ALL SELECT 2, 1 FROM dual
      4     UNION ALL SELECT 3, 1 FROM dual
      5     UNION ALL SELECT 4, 3 FROM dual
      6  ), permissions AS (
      7     SELECT 'A' permission, 1 user_id FROM dual
      8     UNION ALL SELECT 'B', 3 FROM dual
      9  )
     10  SELECT lpad('*', 2 * (LEVEL-1), '*')||u.user_id u,
     11         u.user_id, connect_by_root(permission) permission
     12    FROM users u
     13    LEFT JOIN permissions p ON u.user_id = p.user_id
     14  CONNECT BY u.PARENT = PRIOR u.user_id
     15   START WITH p.permission IS NOT NULL
     16  ORDER SIBLINGS BY user_id;
    
    U         USER_ID PERMISSION
    --------- ------- ----------
    3               3 B
    **4             4 B
    1               1 A
    **2             2 A
    **3             3 A
    ****4           4 A
    


    1. SQL Serverの分離レベル:一連​​の

    2. 12cシーケンス値を使用した列の自動入力

    3. 既存のテーブルの ANSI_NULLS オプションを更新する

    4. Androidアプリにデータをプッシュする