Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menghitung jumlah hop antara sumber dan tujuan?

Jika Anda menjalankan MySQL 8.0, Anda dapat melakukannya dengan kueri rekursif:

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)

Jangkar kueri rekursif adalah simpul yang tidak memiliki tautan masuk; kemudian, ia berjalan di setiap jalur, sambil melacak node asli dan jumlah hop. Terakhir, kueri luar memfilter pada simpul terakhir per jalur.

Demo di DB Fiddle :

source | delivery | hops
:----- | :------- | ---:
s1     | f1       |    3
s2     | 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. koneksi c++ mysql bad_alloc menggunakan konektor c++

  2. Dapatkan satu item dari string daftar di MySQL

  3. MySQL untuk mengisi tanggal yang hilang saat menggunakan GROUP BY DATE(table.timestamp) tanpa bergabung di tabel sementara

  4. PHP - menghubungkan ke database mysql dari server yang berbeda

  5. Masalah Kirim Formulir... Masukkan kunci