3

次の表があります。

+----+---------------------+----------------+
| | ID | 会社 | 親会社 |
+----+---------------------+----------------+
| | 1 | あ | X |
| | 2 | ビ | よ |
| | 3 | シー | Z |
| | 4 | D | あ |
| | 5 | え | D |
+----+---------------------+----------------+

特定の会社とすべての子孫を取得する必要があります。それらの数と展開するレベルの数に関係ありません。

たとえば、会社Aには子Dがいて、その子には子がいEます。これらすべての企業を 1 つの列に表示したいと思います。

自己参加は疲れましたが、レベル数は決まっていると思います。ここでORACLE関連の質問を確認したところ、これが見つかりましが、レベル数が制限されています。

4

1 に答える 1

1

WITH 句の使用:

WITH rt (
    COMPANY,
    CHILD_COMPANY
) AS (
    SELECT
        t.COMPANY,
        t.COMPANY AS CHILD_COMPANY
    FROM
        Test t
    WHERE
        t.COMPANY = 'A' /* selected company */
UNION ALL
    SELECT
        rt.COMPANY,
        t.COMPANY AS CHILD_COMPANY
    FROM
        rt
    JOIN
        Test t
    ON
        rt.CHILD_COMPANY = t.PARENT_COMPANY
)
SELECT
    rt.COMPANY,
    LISTAGG(rt.CHILD_COMPANY, ', ') WITHIN GROUP (ORDER BY rt.CHILD_COMPANY) AS DESCENDANTS
FROM
    rt
WHERE
    rt.COMPANY <> rt.CHILD_COMPANY  /* exclude self-match */
GROUP BY
    rt.COMPANY;
于 2013-11-09T16:55:08.577 に答える