我有一个简单的父/子类型视图,有两列:MYID
和MYPARENTID
. 在 PL/SQL 中,获取父级所有子级的列表非常简单:
SELECT MYID
FROM MYVIEW
START WITH MYID = 'TargetId1'
CONNECT BY PRIOR MYID = MYPARENTID
我会得到这样的东西:
MYID
-----------
TargetId1
TargetId1Child1
TargetId1Grandchild1
但是现在假设我想同时为一组父母这样做:
SELECT MYID
FROM MYVIEW
START WITH MYID IN ('TargetId1', 'TargetId2', 'TargetId3')
CONNECT BY PRIOR MYID = MYPARENTID
我的结果如下所示:
MYID
---------
TargetId1
TargetId1Child1
TargetId1Grandchild1
TargetId2
TargetId2Child2
TargetId2Grandchild1
TargetId3
TargetId3Child3
TargetId3Grandchild1
当我这样做时,我失去了知道特定子节点来自哪里的能力。我得到一个孩子列表,但我想知道START WITH
每个孩子来自哪个根(本质上是值);
我想要一个看起来像这样的结果集:
MYID ROOT
----------------------------------
TargetId1 TargetId1
TargetId1Child1 TargetId1
TargetId1Grandchild1 TargetId1
TargetId2 TargetId2
TargetId2Child2 TargetId2
TargetId2Grandchild2 TargetId2
TargetId3 TargetId3
TargetId3Child3 TargetId3
TargetId3Grandchild3 TargetId3
我怎样才能做到这一点?