【发布时间】:2013-07-02 10:42:34
【问题描述】:
给定的表 T_Person (name, parent) 包含数据
+--------+--------+ |姓名 |家长 | +--------+--------+ |约翰 |彼得 | |彼得 |罗纳德 | |罗纳德 |乔治 | |乔治 | | +--------+--------+可以使用此查询找到关系:
select name, parent, LEVEL
from T_Person
connect by prior name = parent
start with parent is null;
结果是:
+--------+--------+--------+ |姓名 |家长 |水平 | +--------+--------+--------+ |约翰 |彼得 | 4 | |彼得 |罗纳德 | 3 | |罗纳德 |乔治 | 2 | |乔治 | | 1 | +--------+--------+--------+到目前为止还不错。但我想要一个包含所有看起来像这样的关系的结果:
+--------+--------+----------------+ |姓名 |家长 |关系级别 | +--------+--------+----------------+ |约翰 |彼得 | 1 | |彼得 |罗纳德 | 1 | |罗纳德 |乔治 | 1 | |约翰 |罗纳德 | 2 | |彼得 |乔治 | 2 | |约翰 |乔治 | 3 | +--------+--------+----------------+(relation_level:1 = 父亲,2 = 祖父,3 = 祖父,依此类推)
除了在整个表上为每个关系级别选择之外,是否有一种快速的 oracle 方法来接收此结果?
【问题讨论】: