データを含む特定のテーブルT_Person (名前、親)
+--------+--------+ | | 名前 | 親| +--------+--------+ | | ジョン | ピーター | | | ピーター | ロナルド | | | ロナルド | ジョージ | | | ジョージ | | | +--------+--------+
次のクエリを使用してリレーションを見つけることができます。
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 = 祖父、祖父など)
各関係レベルのテーブル全体を選択する以外に、この結果を受け取るための高速なオラクルの方法はありますか?