首页 >数据库 >mysql教程 >递归SQL查询如何按最小产品ID对匹配产品进行分组?

递归SQL查询如何按最小产品ID对匹配产品进行分组?

Barbara Streisand
Barbara Streisand原创
2025-01-05 11:27:39271浏览

How Can a Recursive SQL Query Group Matching Products by Minimum Product ID?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn