SQL Server 中的遞迴查詢
要擷取以最小產品 ID 分組的符合產品,可以使用遞迴查詢。此查詢迭代表,遍歷 Product_ID 關係,並將結果累積到單獨的群組表中。遞歸結構確保所有匹配項都被識別並包含在結果中。
解決方案:
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 是一個遞歸定義,它標識每組的最小 Product_ID。查詢首先選擇沒有符合 Product_Id 的 Product_ID,建立初始群組。在遞歸步驟中,查詢將 CTE 與匹配表連接起來,以識別匹配的 Product_ID 並將它們新增至群組。此過程持續進行,直到處理完所有符合項目。
最終結果是一個名為 groups 的表,其中包含每個群組的 MIN Product_ID 以及屬於該群組的所有 Product_ID。此結構可實現對產品關係和分組的高效查詢。
注意:
要控制遞迴深度,請使用 OPTION(MAXRECURSION n) 子句,將 n 替換為所需的最大遞迴層級。
範例:SQL Fiddle示範
https://www.sqlfiddle.com/#!18/c772e/11
以上是遞歸SQL查詢如何以最小產品ID對比對產品進行分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!