Oracle 分层查询 - 组合结果

Oracle hierarchical query - combine results

给定一个 table:

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。

结合使用 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 |