以下是我的桌子
PARTY
ID, PARTY_ID, PARENT_ID
PARTY_PARTY
BUYER_ID, SUPPLIER_ID
PARTY
表包含买方和供应商的记录。买方将有一个或多个儿童购买者(由儿童购买者列引用PARENT_ID
),这些儿童购买者可以依次拥有儿童购买者。
每个买家也可以有一个或多个供应商,并且在PARTY_PARTY
表格中跟踪此关联,其中BUYER_ID
列保存买家 ID,SUPPLIER_ID
列保存他的供应商 ID。
我能够像这样获得给定买家的所有买家和供应商
获取给定买家的所有分层买家
SELECT ID FROM party START WITH party_id = 'BUYERX' CONNECT BY PRIOR ID = parent_id;
获取上述买家的所有供应商
SELECT ID
FROM party
WHERE ID IN (
SELECT SUPPLIER_ID
FROM party_party
WHERE BUYER_ID IN (
SELECT ID
FROM party START WITH party_id = 'BUYERX' CONNECT BY PRIOR ID = parent_id
)
)
但这里的问题是——最终的供应商可以充当另一家供应商的买方。在那种情况下,我怎样才能获得所有买家和供应商,其中买家包括作为买家的买家和供应商。
我不想使用任何视图或程序!
样本数据
PARTY
ID, PARTY_ID, PARENT_ID
1, BX, NULL
2, BY, 1
3, BZ, 1
4, SA, NULL
5, SB, NULL
6, SC, NULL
7, SD, NULL
8, SE, NULL
9, SF, NULL
PARTY_PARTY
BUYER_ID, SUPPLIER_ID
1, 4
2, 5
3, 6
6, 7
6, 8
8, 9