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中文网其他相关文章!