[英]How do I write this PL/SQL query?
我有一个有 2 列的表:人 (1),他/她的朋友 (2)。
我需要查询 select 所有汤姆的朋友,他朋友的朋友,他们朋友的朋友等等......也许一些 SQL 或 PL/SQL 可以做到这一点?
例如,对于 Tom,此查询应返回:Sara、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 的朋友。 反过来,安娜有一个叫汤姆的朋友,并且没有任何限制,查询可以在这两个朋友之间无限期地打开 go,这将导致它失败并出现“ORA-01436:用户数据中的 CONNECT BY 循环”错误。 NOCYCLE
选项可防止这种重复,并允许查询完成而无需“返回”到已访问过的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.