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

Chọn câu lệnh để trả về cha mẹ và con vô hạn

Vì vậy, tham khảo câu trả lời này:

Đệ quy SQL Server CTE Parent Child

Đây là phiên bản hoạt động với giản đồ của bạn:

Tập lệnh tạo bảng

CREATE TABLE YOUR_TABLE
    ([ID] int, [ParentID] int, [Name] varchar(21))
;
    
INSERT INTO YOUR_TABLE
    ([ID], [ParentID], [Name])
VALUES
    (1, NULL, 'A root'),
    (2, NULL, 'Another root'),
    (3, 1, 'Child of 1'),
    (4, 3, 'Grandchild of 1'),
    (5, 4, 'Great grandchild of 1'),
    (6, 1, 'Child of 1'),
    (7, NULL, 'Another root'),
    (8, 7, 'Child of 6')
;

CTE đệ quy

DECLARE @ID INT = 1

;WITH ParentChildCTE
AS (
    SELECT ID, ParentId, Name        
    FROM YOUR_TABLE
    WHERE Id = @ID

    UNION ALL

    SELECT T1.ID, T1.ParentId, T1.Name        
    FROM YOUR_TABLE T1
    INNER JOIN ParentChildCTE T ON T.ID = T1.ParentID
    WHERE T1.ParentID IS NOT NULL
    )
SELECT *
FROM ParentChildCTE

Phần quan trọng nằm trong CTE tạo trong đó UNION ALL tham gia trở lại tập kết quả, tham gia ID thành ParentId , không giới hạn số lượng cấp độ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể bỏ giản đồ vì nó không tồn tại hoặc bạn không có quyền. - Hướng dẫn SQL Server / TSQL Phần 29

  2. Di chuyển cơ sở dữ liệu hệ thống trong cụm chuyển đổi dự phòng máy chủ SQL

  3. Tương đương với MySQL TRÊN CẬP NHẬT KHÓA DUPLICATE trong Sql Server

  4. Cách loại bỏ Ràng buộc trong SQL Server (T-SQL)

  5. Tạo một cột được tính toán sử dụng dữ liệu từ một bảng khác trong SQL Server