使用递归查询ORACLE 11G查找客户之间的所有依赖关系

Find all dependencies between customers with recursive query ORACLE 11G

我正在尝试编写一个递归 CTE 来为我提供 "primary customer" 所依赖的所有其他客户,但我不知道从哪里开始。

我已经创建了样本数据集和table结构:

create table T_CUSTOMER_RELATIONSHIP (CUST_ID VARCHAR2(10), OTHER_CUST_ID VARCHAR2(10))

insert into T_CUSTOMER_RELATIONSHIP values ('CUST1', 'CUST1');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST1', 'CUST2');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST1', 'CUST3');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST1', 'CUST4');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST5', 'CUST5');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST5', 'CUST4');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST5', 'CUST6');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST7', 'CUST7');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST7', 'CUST6');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST8', 'CUST8');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST8', 'CUST9');
insert into T_CUSTOMER_RELATIONSHIP values ('CUST8', 'CUST10');

commit;

"primary" 客户记录的值与 CUST_ID 和 OTHER_CUST_ID 相同(所以...CUST_ID1,CUST_ID5,CUST_ID7 个,CUST_ID8 个是 "primary" 个客户)

我想获得(比如)CUST_ID1 的结果集如下:

CUST_ID   OTHER_CUST_ID
CUST1     CUST2
CUST1     CUST3
CUST1     CUST4
CUST1     CUST5
CUST1     CUST6
CUST1     CUST7

...这将允许我设置一个提取脚本,该脚本将提取 CUST1 直接相关或通过与另一个主要客户(及其相关的)的共同关系相关的所有客户的所有详细信息客户,因此递归)

这可能吗?

您可以使用分层查询:

SELECT DISTINCT
       CONNECT_BY_ROOT( cust_id ) AS cust_id,
       other_cust_id
FROM   T_CUSTOMER_RELATIONSHIP
START WITH cust_id = 'CUST1'
CONNECT BY NOCYCLE
       (  PRIOR other_cust_id IN ( cust_id, other_cust_id )
       OR PRIOR cust_id       IN ( cust_id, other_cust_id ) )
ORDER BY cust_id, other_cust_id;

输出:

CUST_ID | OTHER_CUST_ID
:------ | :------------
CUST1   | CUST1        
CUST1   | CUST2        
CUST1   | CUST3        
CUST1   | CUST4        
CUST1   | CUST5        
CUST1   | CUST6        
CUST1   | CUST7        

db<>fiddle here