2

我在这里提供一个例子,让你们都明白我真正需要什么:我有一张这样的表:

 Name                                      Null?    Type
 ----------------------------------------- -------- --------------
 Child_ID                                               NUMBER(10)
 Father_ID                                              NUMBER(10)

值为:

    Child_ID       Father_ID
----------         ----------
         2          1
         4          1
         3          2
         5          3

现在我想要父亲 id 1 的分层信息。为此,我编写了一个查询,它为我提供了确切的输出:

**select * from child
start with father_id=1
connect by prior child_id = father_id;**

输出/输出:

      Child_ID       Father_ID
----------           ----------
         2            1
         3            2
         5            3
         4            1

现在我希望 o/p 应该是这样的:

ID
-----
1
2
3
4
5

我可以通过使用联合密钥轻松获得它,但我不想使用它。有没有其他方法可以得到这个?提前致谢。

4

1 回答 1

0

这有点乱,但你可以这样做:

select distinct case when l=1 then child_id else father_id end id
from
    (select child_id, father_id
     from child
     start with father_id=1 connect by prior child_id=father_id) child
     cross join (select level l from dual connect by level < 3)
order by id
;
于 2013-05-23T12:37:15.393 回答