सामान्य समाधान खोजते हुए पाया जा सकता है:"निर्देशित एसाइक्लिक ग्राफ", "ट्रैवर्सल", "एसक्यूएल"। hansolav.net/sql/graphs.html#topologicalsorting कुछ अच्छी जानकारी है।
यदि आपको एक तेज़ उत्तर की आवश्यकता है, तो यहां एक त्वरित और गंदी विधि है। यह कुशल नहीं है, और इसे एक चक्रीय इनपुट की आवश्यकता है, लेकिन यह किसी ऐसे व्यक्ति के लिए पठनीय है जो 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
वैकल्पिक रूप से, पुनरावर्ती CTE के साथ:
;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