5

テーブルは非常に単純で、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を使用しています。

4

2 に答える 2

7

データベース環境では、トップレベルの外部キーは次のように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;

フィドル

于 2017-07-24T16:43:51.303 に答える
4
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

フィドル

于 2013-03-24T06:42:31.893 に答える