आपका कोड केवल एक डेटा शर्त को छोड़कर ठीक काम करेगा, जब आपके 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;