sql >> Databasteknik >  >> RDS >> Mysql

Hur beräknar man antalet hopp mellan källan och destinationen?

Om du kör MySQL 8.0 kan du göra detta med en rekursiv fråga:

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)
 

Ankaret för den rekursiva frågan är noder som inte har någon inkommande länk; sedan går den varje väg samtidigt som den håller reda på de ursprungliga noderna och antalet hopp. Slutligen filtrerar den yttre frågan på den sista noden per sökväg.

Demo på DB Fiddle :

källa | leverans | humle:----- | :------- | ---:s1 | f1 | 3s2 | f2 | 4


  1. Använd NEWID() för att skapa ett unikt värde i SQL Server

  2. mysql hierarkilagring med stora träd

  3. Hur konverterar man en överordnad-underordnad (adjacency)-tabell till en kapslad uppsättning med PHP och MySQL?

  4. sqliteLog 14:kan inte öppna filen på rad