簡體   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