यदि आप MySQL 8.0 चला रहे हैं, तो आप इसे पुनरावर्ती क्वेरी के साथ कर सकते हैं:
with recursive cte as (
select source, delivery, 1 hops
from mytable t
where not exists (select 1 from mytable t1 where t1.delivery = t.source)
union all
select c.source, t.delivery, c.hops + 1
from cte c
inner join mytable t on t.source = c.delivery
)
select source, delivery, hops
from cte c
where hops = (select max(c1.hops) from cte c1 where c1.source = c.source)
पुनरावर्ती क्वेरी का एंकर नोड है जिसमें कोई आवक लिंक नहीं है; फिर, यह मूल नोड्स और हॉप्स की गिनती का ट्रैक रखते हुए प्रत्येक पथ पर चलता है। अंत में, बाहरी क्वेरी प्रति पथ अंतिम नोड पर फ़िल्टर करती है।
source | delivery | hops :----- | :------- | ---: s1 | f1 | 3 s2 | f2 | 4