我有两个表,一个是产品客户映射,另一个是产品共享表。使用 SQL 递归 CTE,给定一个产品,我试图找到所有作为链链接的产品,映射到客户。此外,如果一个产品与另一个产品共享,我也需要将它包含在链中。希望我的例子比描述更有意义
Product Customer Table
Product Customer
Milk Illinois
Milk Michigan
Butter Michigan
Cream Wisconsin
Honey Wisconsin
Cheese Minnesota
Product Sharing Table
Product SharedProduct
Butter Cream
Cream Cheese
对于上述数据,假设我的输入产品是牛奶,那么结果集应该包括所有产品 - 牛奶、黄油、奶油、蜂蜜和奶酪。在这里,Butter-Cream 和 Cream-Cheese 通过产品共享表链接。
我当前的 SQL 看起来像这样,但实际上并没有超过一层深度。
WITH Product_CTE AS
(
SELECT DISTINCT [Product] FROM ProductCustomer
WHERE [Product] IN (SELECT DISTINCT p2.[Product]
FROM ProductCustomer p1 INNER JOIN ProductCustomer p2
ON p1.[Customer] = p2.[Customer] WHERE p1.[Product] = 'Milk')
UNION ALL
SELECT [SharedProduct] FROM ProductSharing b
INNER JOIN Product_CTE p ON p.[Product] = b.[Product]
)
Select [Product] from Product_CTE