2 つのテーブルがあります。1 つは製品顧客マッピングで、もう 1 つは製品共有テーブルです。製品を指定して、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 が Product Sharing テーブルを介してリンクされています。
私の現在の SQL はこのように見えますが、実際には 1 レベル以上深くは機能しません。
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