首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle复杂层次结构

Oracle复杂层次结构
EN

Stack Overflow用户
提问于 2018-11-21 16:42:37
回答 1查看 47关注 0票数 0

通常,我有一个键(契约),它会更改为一行中的另一个键。更改后的键可以更改,为此我们有另一行。钥匙又回到了开始时的样子。我需要为第一个键(所有的键都是从这里开始的)和最新的键(即跳过介于两者之间的所有其他键)占一行。

这将创建该表:

代码语言:javascript
复制
CREATE TABLE CONTRACT ("NAME" VARCHAR2(20 BYTE)
                                   ,"OLD_CONTRACT" VARCHAR2(20 BYTE)
                                   ,"NEW_CONTRACT" VARCHAR2(20 BYTE)
                                   ,"NEW_CONTRACT_DATE" NUMBER(10)) ;

COMMIT;

INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('John','1','10',20180101);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('Ronnie','10','6',20180107);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE) 
VALUES ('Kim','6','1',20180128);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE) 
VALUES ('Nathaly','3','2',20180419);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE)
VALUES ('Gorge','2','8',20180713);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE) 
VALUES ('Allen','8','20',20180921);
INSERT INTO CONTRACT (NAME,OLD_CONTRACT,NEW_CONTRACT,NEW_CONTRACT_DATE) 
VALUES ('Tom','4','11',20170103);

COMMIT;

这是它看起来的样子

代码语言:javascript
复制
Name    old_key      new Key    Updated date 
----    -------      -------    ------------ 
John      1             10      20180101
Ronnie    10             6      20180107
Kim        6             1      20180128
Nathaly    3             2      20180419
Gorge      2             8      20180713
Allen      8             20     20180921
Tom        4             11     20170103

前3行仅返回一行。

代码语言:javascript
复制
Old Key  New Key
-------  -------
   1        1

为什么?因为

代码语言:javascript
复制
1   Becomes 10
10  Becomes 6
6   Becomes 1   

接下来的3行只返回一行。

代码语言:javascript
复制
Old Key  New Key
-------  -------
   3        20

为什么?因为

代码语言:javascript
复制
3   Becomes 2
2   Becomes 8
8   Becomes 20

最后一行返回一行。

代码语言:javascript
复制
Old Key  New Key
-------  -------
   4        11

为什么?因为

代码语言:javascript
复制
4   Becomes 11

我需要帮助编写此方案的查询

EN

回答 1

Stack Overflow用户

发布于 2018-11-21 21:11:48

下面是一个使用CONNECT BY的查询,它执行您想要和需要的连接。从其结果中,您必须选择第一个old_contract和最后一个new_contract。

代码语言:javascript
复制
SELECT NAME,OLD_CONTRACT,NEW_CONTRACT, LEVEL, rownum 
FROM contract
START WITH OLD_CONTRACT = 3
CONNECT BY NOCYCLE PRIOR NEW_CONTRACT = OLD_CONTRACT

结果

代码语言:javascript
复制
NAME    OLD_CONTRACT    NEW_CONTRACT    LEVEL   ROWNUM
Nathaly 3               2               1       1
Gorge   2               8               2       2
Allen   8               20              3       3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53408150

复制
相关文章

相似问题

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