首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle通过上/下层次结构连接

Oracle通过上/下层次结构连接
EN

Stack Overflow用户
提问于 2014-08-06 09:04:30
回答 2查看 1.6K关注 0票数 3

如何使用connect by获取层次结构的顶部和底部,我有一个存储id之间转换的表( id -> REPLACE_ID),我感兴趣的是从任何id开始获取最新的id。

代码语言:javascript
复制
--drop table test_connect_by;
create table test_connect_by(ID number, REPLACE_ID NUMBER);
insert into test_connect_by values(1,2);
insert into test_connect_by values(2,3);
insert into test_connect_by values(3,4);

insert into test_connect_by values(51,52);
insert into test_connect_by values(52,53);
insert into test_connect_by values(53,54);
insert into test_connect_by values(55,55);

SELECT id,replace_id, level
   FROM test_connect_by
   START WITH ID in (1,51)
   CONNECT BY PRIOR replace_id = id;

我对从1-4到51-54的过渡感兴趣,或者我可以从2开始,得到2-4。有什么我可以通过分组来识别从1开始的组和从51开始的组吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-06 09:30:22

作为一种(更直截了当的)方法,您可以根据id值简单地找到最低的connect_by_root()和最高的replace_id分组,如果replace_id总是被保证大于id,那么请参阅Lennart answer

代码语言:javascript
复制
select min(id)         as begins
     , max(replace_id) as ends
  from test_connect_by
 start with id in (1, 51)
 connect by id = prior replace_id
 group by connect_by_root(id)

结果:

代码语言:javascript
复制
    BEGINS       ENDS
---------- ----------
         1          4
        51         54
票数 2
EN

Stack Overflow用户

发布于 2014-08-06 09:29:43

未经测试,因此可能会出现一些错误:

代码语言:javascript
复制
select id, replace_id 
from (
    SELECT CONNECT_BY_ROOT id as id, replace_id
         , row_number() over (partition by CONNECT_BY_ROOT id order by level desc) as rn
    FROM test_connect_by
    START WITH ID in (1,51)
    CONNECT BY PRIOR replace_id = id
) as T 
where rn = 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25156253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档