Uw code werkt prima, behalve voor één gegevensvoorwaarde, namelijk wanneer uw to_customer (1000022560394) zelf de transactie heeft gestart en na een bepaald transactieniveau alleen aan hem wordt teruggegeven.
Bijv-Voorbeeldgegevensset
In dit geval zal uw recursieve deel van de zoekopdracht alle voorwaarden waar vinden, zelfs aan het einde van de transactie, want de gegevens staan zowel in uw normale tabel als in de incrementele dataset.
Eén oplossing is om een wedstrijdvlag te maken om het aantal ontmoetingen te bepalen en een oneindige lus te vermijden:
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;