给出一张表:
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。
答案 0 :(得分:1)
使用CONNECT_BY_ROOT( old_id )
的组合来获取层次结构的开头,并使用WHERE CONNECT_BY_ISLEAF = 1
来查找层次结构中的最后一项:
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 |