Я пытаюсь определить рекурсивную / циклическую ссылку в моих данных, для которых мне нужен рекурсивный cte.
Например, у меня есть таблица, которая содержит Product_ID
и Inner_Product_ID
.Я хочу получить результаты, когда Product_ID A является внутренним для Product_ID B, который является внутренним для Product_ID C, который является внутренним для Product_ID A.
Образцы данных
PRODUCT_ID INNER_PRODUCT_ID
12 36
24 12
36 24
1 2
3 4
Ожидаемый вывод
PRODUCT_ID INNER_PRODUCT_ID
12 36
24 12
36 24
Я пробовал базовый запрос с cte, но не уверен, как реализовать рекурсивный cte для этой проблемы:
;WITH RNCTE
AS ( SELECT *,
ROW_NUMBER() OVER (PARTITION BY pr1.PRODUCT_ID
ORDER BY pr1.PRODUCT_ID
) rn
FROM
TableName pr1),
cte
AS ( SELECT *
FROM RNCTE
WHERE RNCTE.rn = 1
UNION ALL
SELECT *
FROM cte c
JOIN RNCTE r
ON r.PRODUCT_ID = c.PRODUCT_ID
AND r.rn = c.rn + 1)
SELECT *
FROM cte;