Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Temukan awal dan akhir rantai pengalihan

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan:Tidak dapat mengambil baris dari penyedia OLE DB ADsDSOObject untuk server tertaut ADSI

  2. T-sql - tentukan apakah nilainya bilangan bulat

  3. Kinerja Query SQL Server 2005

  4. Cara mendapatkan daftar Tabel tanpa Batasan Kunci Utama di Database SQL Server - Tutorial SQL Server / T-SQL Bagian 58

  5. Tidak dapat memulai server sql dalam mode pengguna tunggal