Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tìm điểm bắt đầu và kết thúc của một chuỗi chuyển hướng

Giải pháp chung có thể được tìm thấy khi tìm kiếm:"Đồ thị vòng tròn được hướng dẫn", "Truyền tải", "SQL". hansolav.net/sql/graphs.html#topologicalsorting có một số thông tin tốt.

Nếu bạn cần một câu trả lời nhanh, đây là một phương pháp nhanh chóng và hiệu quả. Nó không hiệu quả và nó cần một đầu vào xoay vòng, nhưng nó có thể đọc được đối với những người không quen thuộc với 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

Ngoài ra, với CTE đệ quy:

;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. Truy xuất hàng cuối cùng được chèn bằng Uniqueidentifier mà nó không phải là IDENTITY

  2. Truy vấn T-SQL để hiển thị định nghĩa bảng?

  3. Bộ lọc SQL tiêu chí trong tiêu chí nối hoặc mệnh đề where hiệu quả hơn

  4. Cách tải tệp XML phân cấp khổng lồ (nhưng đơn giản) vào một bảng SQL

  5. TSQL:Tạo một dạng xem truy cập nhiều cơ sở dữ liệu