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 个链接。

SQL Fiddle

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 )

Results:

| PARTNER1 |
|----------|
|        1 |
|        4 |
|        3 |