2015-05-13 70 views
0

我有一个合作伙伴1 < - >合作伙伴2的关系,我有这样的事情:甲骨文递归SQL

(partner1, partner2) 
(1,  2) 
(3,  2) 
(3,  5) 
(4,  5) 
(4,  8) 
(33,  45) 

我已经是合作伙伴1值之一,我需要看到这个的所有合作伙伴1值链。 所以,在上面的例子中,我会合作伙伴1 = 3,并且我想查看列表:

1 
3 
4 

链不太可能有超过10个链接。

+0

http://stackoverflow.com/questions/tagged/oracle+recursive-query –

+3

你的例子不清楚 - 你是如何得到1,3,4? – alfasin

回答

1

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 | 
+0

太棒了!谢谢。 – Gella