Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment calculer le nombre de sauts entre la source et la destination ?

Si vous utilisez MySQL 8.0, vous pouvez le faire avec une requête récursive :

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)

L'ancre de la requête récursive est constituée de nœuds qui n'ont pas de lien entrant ; ensuite, il parcourt chaque chemin, tout en gardant une trace des nœuds d'origine et du nombre de sauts. Enfin, la requête externe filtre sur le dernier nœud par chemin.

Démo sur DB Fiddle :

source | delivery | hops
:----- | :------- | ---:
s1     | f1       |    3
s2     | f2       |    4