我有兩個表,一個是產品客戶映射,另一個是產品共享表。使用SQL遞歸CTE,在給定產品的情況下,我試圖找到所有鏈接爲鏈的產品,並映射到客戶之間。另外,如果產品與其他產品共享,我也需要將其包含在鏈中。希望我的例子更有意義比描述使用兩個表的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
對於上述數據,假設我輸入的是牛奶,然後將結果集應包括所有的產品 - 牛奶,黃油,奶油,蜂蜜&奶酪。在這裏黃油奶油&奶油芝士通過產品共享錶鏈接。
我目前的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
只是爲了澄清,你的例子來自'親愛的':牛奶>密歇根州>黃油>奶油(通過分享)>威斯康星州>蜂蜜。是對的嗎? – HABO
是的,這是正確的。 – user320587