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

有向非巡回グラフ:特定のノードからのすべてのパスを検索します

    WITH RECURSIVE parent_line(path, id) AS (
        SELECT ARRAY[(row_number() OVER (PARTITION BY CP.idc))::integer], C.id
        FROM categorias C JOIN categ_parents CP ON C.id = CP.idparent
        WHERE CP.idc = 36
        UNION ALL
        SELECT PL.path || (row_number() OVER (PARTITION BY PL.id))::integer,
            C.id
        FROM categorias C
        JOIN categ_parents CP ON C.id = CP.idparent
        JOIN parent_line PL on CP.idc = PL.id
    ),
    real_parent_line(path, chainid, id) AS (
        SELECT PL.path, (row_number() OVER (PARTITION BY PL.id)),
            PL.id
        FROM parent_line PL
        WHERE PL.id IN (
            SELECT id
            FROM categorias C LEFT JOIN categ_parents CP
                ON (C.id = CP.idc)
            WHERE CP.idc IS NULL
        )
        UNION ALL
        SELECT PL.path, chainid, PL.id
        FROM parent_line PL, real_parent_line RPL
        WHERE array_upper(PL.path,1) + 1 = array_upper(RPL.path,1)
            AND PL.path = RPL.path[1:(array_upper(RPL.path,1)-1)]
    )
    SELECT array_accum(id) AS ids
    FROM real_parent_line RPL
    GROUP BY chainid;
    

    最初のWITH 節はこれを与えます:

    path             | id
    ------------------------
    "{1}"              31
    "{1,1}"            22
    "{1,2}"            30
    "{1,1,1}"          20
    "{1,1,2}"          8
    "{1,2,1}"          20
    "{1,1,2,1}"        5
    "{1,1,1,1}"        1
    "{1,2,1,2}"        1
    "{1,1,2,1,1}"      2
    "{1,1,2,1,1,1}"    1
    "{1,1,2,1,1,2}"    20
    "{1,1,2,1,1,2,1}"  1
    

    [email protected] に感​​謝します 助けが必要です。




    1. codeigniter:セッションで別のテーブルからテーブルを更新します

    2. ORMを介したSQLAlchemyオブジェクトのロードが、生のMySQLdbカーソルを介した行よりも5〜8倍遅いのはなぜですか?

    3. vagranted仮想マシンでpostgresqlにアクセスする方法は?

    4. Dockerコンテナのmysqlパスワードを変更します