Oracle分层查询 - 结合结果

时间:2017-12-07 11:35:56

标签: oracle hierarchical-data

给出一张表:

Old_ID  New_ID
A       B
B       C

多个ID更改可以形成链A - > B - > C.我可以进行分层查询。

SELECT Old_ID, New_ID from mytable
CONNECT BY PRIOR New_ID = Old_ID

由于C是A和B的有效新ID,因此我想得到的结果是:

Old_ID  New_ID
A       C
B       C

因此,将所有旧ID映射到链中的最新新ID。

1 个答案:

答案 0 :(得分:1)

使用CONNECT_BY_ROOT( old_id )的组合来获取层次结构的开头,并使用WHERE CONNECT_BY_ISLEAF = 1来查找层次结构中的最后一项:

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE your_table( Old_ID, New_ID ) As
SELECT 'A', 'B' FROM DUAL UNION ALL
SELECT 'B', 'C' FROM DUAL;

查询1

SELECT CONNECT_BY_ROOT( old_id ) AS old_id,
       new_id
FROM   your_table
WHERE  CONNECT_BY_ISLEAF = 1
CONNECT BY PRIOR New_ID = Old_id

<强> Results

| OLD_ID | NEW_ID |
|--------|--------|
|      A |      C |
|      B |      C |