Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để tính toán số bước nhảy giữa nguồn và đích?

Nếu bạn đang chạy MySQL 8.0, bạn có thể thực hiện việc này bằng truy vấn đệ quy:

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)

Neo của truy vấn đệ quy là các nút không có liên kết đến; sau đó, nó đi từng con đường, đồng thời theo dõi các nút ban đầu và số lượng bước nhảy. Cuối cùng, truy vấn bên ngoài lọc trên nút cuối cùng trên mỗi đường dẫn.

Bản trình diễn trên DB Fiddle :

nguồn
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. Cách tạo đường hầm ssh trong ruby ​​và sau đó kết nối với máy chủ mysql trên máy chủ từ xa

  2. Đổi tên cơ sở dữ liệu MySQL

  3. Khóa MySQL UNIQUE không hoạt động

  4. Laravel - Tạo bảng động (không di chuyển)

  5. Làm cách nào để lấy kích thước byte của tập kết quả trong truy vấn SQL?