Oracle 递归 sql
Oracle recursive sql
我有一个 partner1 <-> partner2 关系,我有这样的关系:
(partner1, partner2)
(1, 2)
(3, 2)
(3, 5)
(4, 5)
(4, 8)
(33, 45)
我拥有的是 partner1 值之一,我需要查看此链中的所有 partner1 值。
因此,在上面的示例中,我希望 partner1=3,并且我希望看到列表:
1
3
4
该链不太可能有超过 10 个链接。
Oracle 11g R2 架构设置:
CREATE TABLE partners ( partner1, partner2 ) AS
SELECT 1,2 FROM DUAL UNION ALL
SELECT 3,2 FROM DUAL UNION ALL
SELECT 3,5 FROM DUAL UNION ALL
SELECT 4,5 FROM DUAL UNION ALL
SELECT 4,8 FROM DUAL UNION ALL
SELECT 33,45 FROM DUAL;
查询 1:
SELECT DISTINCT PARTNER1
FROM PARTNERS
START WITH partner1 = 3
CONNECT BY NOCYCLE
( MOD( LEVEL, 2 ) = 0 AND PRIOR partner2 = partner2 )
OR ( MOD( LEVEL, 2 ) = 1 AND PRIOR partner1 = partner1 )
| PARTNER1 |
|----------|
| 1 |
| 4 |
| 3 |
我有一个 partner1 <-> partner2 关系,我有这样的关系:
(partner1, partner2)
(1, 2)
(3, 2)
(3, 5)
(4, 5)
(4, 8)
(33, 45)
我拥有的是 partner1 值之一,我需要查看此链中的所有 partner1 值。 因此,在上面的示例中,我希望 partner1=3,并且我希望看到列表:
1
3
4
该链不太可能有超过 10 个链接。
Oracle 11g R2 架构设置:
CREATE TABLE partners ( partner1, partner2 ) AS
SELECT 1,2 FROM DUAL UNION ALL
SELECT 3,2 FROM DUAL UNION ALL
SELECT 3,5 FROM DUAL UNION ALL
SELECT 4,5 FROM DUAL UNION ALL
SELECT 4,8 FROM DUAL UNION ALL
SELECT 33,45 FROM DUAL;
查询 1:
SELECT DISTINCT PARTNER1
FROM PARTNERS
START WITH partner1 = 3
CONNECT BY NOCYCLE
( MOD( LEVEL, 2 ) = 0 AND PRIOR partner2 = partner2 )
OR ( MOD( LEVEL, 2 ) = 1 AND PRIOR partner1 = partner1 )
| PARTNER1 |
|----------|
| 1 |
| 4 |
| 3 |