Hvis du kører MySQL 8.0, kan du gøre dette med en rekursiv forespørgsel:
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)
Ankeret for den rekursive forespørgsel er noder, der ikke har noget indgående link; derefter går den hver vej, mens den holder styr på de oprindelige knudepunkter og antallet af hop. Til sidst filtrerer den ydre forespørgsel på den sidste node pr. sti.