Giới thiệu về CTE đệ quy

Truy vấn phân cấp và đệ quy trong SQL Server

Jasmin Ludolf

Content Developer

CTE đệ quy

Gồm 4 phần:

WITH cte_name AS (

-- Anchor member initial_query
UNION ALL -- Recursive member recursive_query termination_condition )
SELECT * FROM cte_name
Truy vấn phân cấp và đệ quy trong SQL Server

Hướng dẫn dùng CTE đệ quy

  • Nếu cần hơn 100 bước đệ quy, tăng giới hạn bước:

    • OPTION(MAXRECURSION 32767)
  • Không cho phép các lệnh: GROUP BY, HAVING, LEFT JOIN, RIGHT JOIN, OUTER JOIN, SELECT DISTINCT, Subqueries,TOP

  • Số cột của anchor và recursive member phải bằng nhau

  • Kiểu dữ liệu của anchor và recursive member phải giống nhau

Truy vấn phân cấp và đệ quy trong SQL Server

Ví dụ đệ quy

Tính giai thừa:

Giai thừa của n là tích của các số nguyên dương ≤ n:

3! = 1 x 2 x 3 = 6

Giai thừa n! được định nghĩa đệ quy như sau:

  • 0! = 1 khi iteration = 1
  • (n+1)! = n! * (iteration+1) khi iteration > 1
Truy vấn phân cấp và đệ quy trong SQL Server

Ví dụ đệ quy trong mã

WITH recursion AS

(SELECT 1 AS iterationCounter,1 AS factorial
UNION ALL SELECT iterationCounter+1,factorial * (iterationCounter+1) FROM recursion
WHERE iterationCounter < 10 )
SELECT factorial FROM recursion
3628800
Truy vấn phân cấp và đệ quy trong SQL Server

Ayo berlatih!

Truy vấn phân cấp và đệ quy trong SQL Server

Preparing Video For Download...