Запрос, вычисляющий минимальное расстояние между узлами ациклического ориентированного графа
WITH TC(src_pid, tgt_pid, distance)
AS
( SELECT src_pid, tgt_pid, 1 FROM Links
UNION ALL
SELECT P.src_pid, C.tgt_pid, P.distance+1
FROM Links AS C
JOIN TC AS P
ON C.src_pid = P.tgt_pid )
SELECT src_pid, tgt_pid, MIN(distance) AS min_distance
FROM TC
GROUP BY src_pid, tgt_pid
ORDER BY src_pid, tgt_pid;