从oracle中提取父层次结构

时间:2017-12-18 16:49:24

标签: oracle

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

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;

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

1 个答案:

答案 0 :(得分: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
;