分层查询Oracle SQL,从两端获取关系

8zzbczxx  于 2023-02-18  发布在  Oracle
关注(0)|答案(1)|浏览(107)

假设我们有以下关系
| 朋友_来自|朋友_到|
| - ------|- ------|
| 鲍勃|约翰|
| 翠西|约翰|
我如何使用层次查询来获取所有与'BOB'相关的行。所以基本上是一个双向查询。
预期结果:
| 朋友_来自|朋友_到|
| - ------|- ------|
| 鲍勃|约翰|
| 翠西|约翰|
我的疑问:

SELECT friend_from, friend_to
  FROM friends
  start with friend_from='BOB'
  CONNECT BY PRIOR friend_from = friend_to;/

这只会返回
| 朋友_来自|朋友_到|
| - ------|- ------|
| 鲍勃|约翰|

l2osamch

l2osamch1#

你需要一个更大的样本数据集来充分描述这个问题,但我认为,如果你想连接双方的关系,那么你可以使用:

SELECT friend_from,
       friend_to
FROM   friends
START WITH friend_from = 'BOB'
CONNECT BY NOCYCLE
       PRIOR friend_from IN (friend_from, friend_to)
OR     PRIOR friend_to   IN (friend_from, friend_to);

其中,对于示例数据:

CREATE TABLE friends (friend_from, friend_to) AS
SELECT 'BOB',   'JOHAN' FROM DUAL UNION ALL
SELECT 'TRACY', 'JOHAN' FROM DUAL;

输出:
| 好友_发件人|朋友_至|
| - ------|- ------|
| 鲍勃|约翰|
| 翠西|约翰|
fiddle

相关问题