Kode Anda akan berfungsi dengan baik kecuali hanya untuk satu kondisi data yaitu ketika pelanggan Anda (1000022560394) sendiri telah memulai transaksi di tempat pertama dan setelah beberapa tingkat transaksi dikembalikan kepadanya saja.
Untuk kasus ini, bagian kueri Rekursif Anda akan menemukan semua kondisinya benar bahkan di akhir transaksi, karena data akan ada di tabel normal dan set data tambahan.
Salah satu solusinya adalah membuat tanda kecocokan untuk menentukan jumlah pertemuannya dan menghindari pengulangan tak terbatas:
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;