SQL Server中的递归查询

Ank*_*kit 30 sql sql-server

我有一个具有以下结构的表

表名: matches

表名:匹配

这基本上存储哪个产品匹配哪个产品.我需要处理这个表并存储在如下的组表中.

表名: groups

在此输入图像描述

group_ID存储所述MIN Product_IDProduct_IDS形成一组.举个例子来说吧

如果A匹配B而B匹配C,那么三行应该以格式分组 (A, A), (A, B), (A, C)

我已经尝试过查看与co-related相关的子查询和CTE,但是没有让它实现.

我需要在SQL中完成所有这些操作.

谢谢您的帮助 .

Ham*_*yan 55

试试这个:

;WITH CTE
AS
(
    SELECT DISTINCT
        M1.Product_ID 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
Run Code Online (Sandbox Code Playgroud)

您可以使用它OPTION(MAXRECURSION n)来控制递归深度.

SQL FIDDLE DEMO