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

oracleconnectbyを使用して隣接リストモデル内のすべてのノードを検索します。

    最後に、私は次のような解決策を思いつきました:

      SELECT child FROM child_parent START WITH parent =
       (
        SELECT DISTINCT parent FROM   
         (
          SELECT parent
          FROM child_parent
          WHERE CONNECT_BY_ISLEAF = 1
            START WITH child = 5
            CONNECT BY PRIOR parent = child
          UNION
          SELECT parent
          FROM child_parent
          WHERE parent = 5
         ) 
       )
       CONNECT BY NOCYCLE PRIOR child = parent
       UNION
       SELECT DISTINCT parent FROM   
       (
        SELECT parent
        FROM child_parent
        WHERE CONNECT_BY_ISLEAF = 1
          START WITH child = 5
          CONNECT BY PRIOR parent = child
        UNION
        SELECT parent
        FROM child_parent
        WHERE parent = 5
       );
    

    提供された例ではすべてのノードで機能しますが、リーフの1つに2番目の親があり、開始点がこのノードの上または別のブランチにある場合は機能しません。

    しかし、私にとってはそれで十分です。

    グラフ内のすべてのノードを取得するための解決策は、次のようになります:上記のクエリの反対を(上から下に)実装し、新しいノードがなくなるまでそれらを実行します(下から上、上から下)。これには必要があります。 PL/SQLと私もパフォーマンスについて知りません。



    1. ORA-01036:C#でクエリを実行する際の変数name/numberが不正です

    2. desc操作で列のコメントを表示する方法

    3. Oracleでユーザーに付与されている特権と役割を見つける方法は?

    4. PostgreSQLでの日付のフォーマット