Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak obliczyć liczbę przeskoków między źródłem a miejscem docelowym?

Jeśli używasz MySQL 8.0, możesz to zrobić za pomocą zapytania rekurencyjnego:

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)
 

Kotwicą zapytania rekurencyjnego są węzły, które nie mają łącza przychodzącego; następnie przechodzi każdą ścieżkę, śledząc oryginalne węzły i liczbę przeskoków. Na koniec zewnętrzne zapytania filtrują w ostatnim węźle na ścieżkę.

Demo na DB Fiddle :

źródło | dostawa | chmiel:----- | :------- | ---:s1 | f1 | 3s2 | f2 | 4


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać pierwszy dzień każdego miesiąca w mysql?

  2. Chcesz numer wiersza w grupie kolumny w MY SQL?

  3. Jak naprawić błąd klucza obcego podczas uruchamiania migracji

  4. Błąd Mysql 1452 - Nie można dodać lub zaktualizować wiersza podrzędnego:ograniczenie klucza obcego nie powiodło się

  5. Niezwykle podstawowy PHP i Mysql