Solusi umum dapat ditemukan dengan mencari:"Grafik Acyclic Berarah", "Traversal", "SQL". hansolav.net/sql/graphs.html#topologicalsorting memiliki beberapa info bagus.
Jika Anda membutuhkan jawaban cepat, inilah metode cepat dan kotor. Ini tidak efisien, dan memerlukan input asiklik, tetapi dapat dibaca oleh orang yang tidak terbiasa dengan sql.
SELECT id, FromUrl, ToUrl
INTO #temp
FROM dbo.redirect
WHILE @@ROWCOUNT > 0
BEGIN
UPDATE cur
SET ToUrl = nxt.ToURL
FROM #temp cur
INNER JOIN #temp nxt ON (cur.ToURL = nxt.FromURL)
END
SELECT * FROM #temp
Atau, dengan CTE rekursif:
;WITH cte AS (
SELECT 1 as redirect_count, id, FromURL, ToUrl
FROM dbo.redirect
UNION ALL
SELECT redirect_count + 1, cur.id, cur.FromURL, nxt.ToURL
FROM cte cur
INNER JOIN @t nxt ON (cur.ToURL = nxt.FromURL)
)
SELECT
t1.id, t2.FromUrl, t2.ToUrl
FROM dbo.redirect t1
CROSS APPLY (
SELECT TOP 1 FromUrl, ToUrl
FROM cte
WHERE id = t1.id
ORDER BY redirect_count DESC
) t2