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.