给定包含数据的表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 方法来接收此结果?