sql >> Databáze >  >> RDS >> Mysql

Jak vypočítat počet skoků mezi zdrojem a cílem?

Pokud používáte MySQL 8.0, můžete to provést pomocí rekurzivního dotazu:

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)

Kotva rekurzivního dotazu jsou uzly, které nemají žádný příchozí odkaz; pak prochází každou cestu, přičemž sleduje původní uzly a počet skoků. Nakonec vnější dotaz filtruje poslední uzel na cestu.

Ukázka na DB Fiddle :

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



  1. PHP/SQL databáze dotazování osvědčených postupů a zabezpečení

  2. Chyba analýzy:chyba syntaxe, neočekávaná (T_VARIABLE)

  3. Hromadné vkládání MySQL z datových souborů CSV

  4. Milisekundy v mém DateTime se při uložení na SQL Server změní