usando una terminada recursivo recursividad recursivas recursiva máxima jerárquicas instrucción hacer finalizar ejemplos datos consultas consulta como antes agotó sql sql-server

sql - una - instrucción terminada. se agotó la recursividad máxima(100) antes de finalizar la instrucción.



Consulta recursiva en SQL Server (2)

Tengo una mesa con la siguiente estructura.

Nombre de la tabla: matches

Eso básicamente almacena qué producto coincide con qué producto. Necesito procesar esta tabla Y almacenar en una tabla de grupos como abajo.

Nombre de la tabla: groups

group_ID almacena el MIN Product_ID group_ID que forma un grupo. Para dar un ejemplo digamos

Si A coincide, B y B coinciden con C, entonces tres filas deben ir a la tabla de grupos en formato (A, A), (A, B), (A, C)

He intentado buscar subconsultas co-relacionadas y CTE, pero no lograr que esto se implemente.

Necesito hacer todo esto en SQL.

Gracias por la ayuda .


Algo como esto (no probado)

with match_groups as ( select product_id, matching_product_id, product_id as group_id from matches where product_id not in (select matching_product_id from matches) union all select m.product_id, m.matching_product_id, p.group_id from matches m join match_groups p on m.product_id = p.matching_product_id ) select group_id, product_id from match_groups order by group_id;


Prueba esto:

;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

Puede utilizar la OPTION(MAXRECURSION n) para controlar la profundidad de la recursión.

DEMO FIDDLE DE SQL