SQL Server:對匹配產品進行分組的遞歸查詢
在名為「matches」的關係資料庫表中,每筆記錄代表兩個之間的匹配產品。目標是建立一個「群組」表,以分層結構捕獲這些匹配項。具體來說,「group_ID」欄位應儲存屬於同一組的最小產品 ID。
為了實現這一點,我們可以利用 SQL 中遞歸查詢的功能。遞歸查詢對相同資料執行多輪操作。以下是一個使用公共表表達式(CTE) 來追蹤遞歸操作的解決方案:
WITH CTE AS ( SELECT DISTINCT M1.Product_ID AS Group_ID, M1.Product_ID FROM matches M1 LEFT JOIN matches M2 ON M1.Product_Id = M2.matching_Product_Id WHERE M2.matching_Product_Id IS NULL UNION ALL SELECT C.Group_ID, M.matching_Product_Id FROM CTE C JOIN matches M ON C.Product_ID = M.Product_ID ) SELECT * FROM CTE ORDER BY Group_ID
遞歸的基本情況是當產品沒有匹配項時,在這種情況下它會形成自己的組。這是在 CTE 的第一部分中捕獲的。
SELECT DISTINCT M1.Product_ID AS Group_ID, M1.Product_ID FROM matches M1 LEFT JOIN matches M2 ON M1.Product_Id = M2.matching_Product_Id WHERE M2.matching_Product_Id IS NULL
CTE 的遞迴部分找出每組的所有配對產品。它會迭代地將這些匹配的產品添加到群組中。
SELECT C.Group_ID, M.matching_Product_Id FROM CTE C JOIN matches M ON C.Product_ID = M.Product_ID
最後,我們可以透過按「Group_ID」欄位對 CTE 進行排序來依層次順序擷取結果。
SELECT * FROM CTE ORDER BY Group_ID
這遞歸查詢有效地在「groups」表中產生所需的產品分組。層次關係由「group_ID」欄位捕獲,確保每一行反映不同的產品群組。
透過利用 SQL Server 的遞歸功能,我們可以有效率地擷取複雜的層次結構模式和複雜的群組相關資料。資料庫結構。
以上是如何使用遞迴查詢在 SQL Server 中將符合產品分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!