从oracle中提取父层次结构

问题描述 投票:0回答:1

来自具有2列的Oracle表(childName,parentName)

a, b
b, c
c, d
m, n
x, y

我想让所有父母的等级从孩子'a'开始,并将其返回到下表

a, b
a, c
a, d
b, c
b, d
c, d

我试过(更新)

SELECT CONNECT_BY_ROOT childName AS childName, parentName
FROM table_parents
START WITH childName IN (
    SELECT 'a' as parentName FROM DUAL
    UNION
    SELECT parentName FROM (
        SELECT CONNECT_BY_ROOT childName AS childName, parentName
        FROM table_parents
        START WITH childName = 'a'
        CONNECT BY PRIOR parentName = childName
    )
)
CONNECT BY PRIOR parentName = childName;

但我想知道是否有更好的。

oracle
1个回答
0
投票

我会做这样的事情:

select     childname, connect_by_root parentname as parentname
from       table_parents
start with parentname in (
                           select     parentname
                           from       table_parents
                           start with childname = 'a'
                           connect by childname = prior parentname
                         )
connect by parentname = prior childname
;
© www.soinside.com 2019 - 2024. All rights reserved.