如何编写此PL/SQL查询



我有一个有两列的表:个人(1(,他/她的朋友(2(。

我需要一个查询来选择Tom的所有朋友,他的朋友的朋友,他们朋友的朋友等等…也许一些SQL或PL/SQL可以做到这一点?

例如,对于Tom,这个查询应该返回:Sara、Anna、Alex、Lisa。

Person 他/她的朋友
Tom Sara
Tom Anna
Anna Tom
Anna Alex
Alex Anna
Alex Lisa

您可以使用分层查询从朋友继续到朋友或朋友等等:

SELECT     DISTINCT friend_name
FROM       friends
WHERE      friend_name != 'Tom'
START WITH name = 'Tom'
CONNECT BY NOCYCLE PRIOR friend_name = name

编辑:
要解决评论中关于nocycle选项的问题:在没有任何限制的情况下,分层查询理论上可以永远重复出现。例如,根据这些数据,Tome有一个朋友叫Anna。安娜有一个朋友叫汤姆,在没有任何限制的情况下,这两个朋友之间的查询可以无限期地进行,这将导致查询失败,并显示一个";ORA-01436:用户数据中的CONNECT BY循环";错误CCD_ 2选项防止这种重复;返回";到它已经访问过的值。

最新更新