テーブルは非常に単純で、pidは親IDを意味し、cidは子IDを意味します。また、テーブルには複数のツリーが存在する可能性があります。したがって、私の質問は、複数の
cidを
知って
いる場合、ここでルートの祖先を取得するにはどうすればよいかということです。例
pid cid
1 2
2 3
3 4
5 6
6 7
7 8
cid=4またはcid=8の場合、最終的にpidが1 ro 5であるルートの祖先を取得したいので、oracle10gを使用しています。
データベース環境では、トップレベルの外部キーは次のようにnullになる可能性があります。
| pid | cid |
|------*------|
| null | 2 |
| 2 | 3 |
| 3 | 4 |
| null | 6 |
| 6 | 7 |
| 7 | 8 |
したがって、次のようなものを使用することをお勧めします。
select connect_by_root(t1.cid) as startpoint,
t1.cid as rootnode
from your_table t1
where connect_by_isleaf = 1
start with t1.cid in (8, 4)
connect by prior t1.pid = t1.cid;
select
t1.cid,
connect_by_root(t1.pid) as root
from
your_table t1
left join your_table t2
on t2.cid = t1.pid
where t1.cid in (4, 8)
start with t2.cid is null
connect by t1.pid = prior t1.cid