Вашият код ще работи добре, с изключение само на едно условие за данни, което е, когато вашият to_customer (1000022560394) сам е започнал транзакцията на първо място и след известно ниво на транзакция тя се връща само на него.
Например-Примерен набор от данни
В този случай вашата рекурсивна част от заявката ще намери всички условия за верни дори в края на транзакцията, тъй като данните ще бъдат там както в нормалната ви таблица, така и в инкременталния набор от данни.
Едно решение е да се създаде флаг за съвпадение, за да се определи броят му на срещи и да се избегне безкраен цикъл:
WITH EmpsCTE (affiliation_id, from_customer_id,to_customer_id, to_name,level1,match_count)
AS
(
SELECT affiliation_id, from_customer_id,to_customer_id, to_name, 0, 0 match_count
FROM affiliation aff
WHERE to_customer_id != from_customer_id
and to_customer_id = 1000022560394
UNION ALL
SELECT aff.affiliation_id, aff.from_customer_id,aff.to_customer_id, aff.to_name, m.level1 + 1,1 match_count
FROM affiliation aff
INNER JOIN EmpsCTE m
ON aff.to_customer_id = m.from_customer_id
where m.match_count=0
)
SELECT * FROM EmpsCTE;