繁体   English   中英

如何编写这个 PL/SQL 查询?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM