3

我有下表:

+----+---------+----------------+
| 身份证 | 公司 | 父公司|
+----+---------+----------------+
| 1 | 一个 | X |
| 2 | 乙| 是 |
| 3 | C | Z |
| 4 | D | 一个 |
| 5 | E | D |
+----+---------+----------------+

我需要检索某个公司和所有后代,无论他们有多少以及他们扩展了多少级别。

例如,公司A有孩子D,公司有孩子E,等等。我想在一个专栏中展示所有这些公司。

我厌倦了自我加入,但我认为它的级别数是固定的。我在这里检查了ORACLE相关的问题,我发现了这个,但是级别的数量是有限的。

4

1 回答 1

1

Using WITH clause:

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 回答