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

Pilih pernyataan untuk mengembalikan induk dan anak tak terbatas

Jadi referensi jawaban ini:

SQL Server CTE Parent Child rekursif

Berikut adalah versi yang berfungsi dengan skema Anda:

Skrip Pembuatan Tabel

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 rekursif

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

Bagian kuncinya ada di CTE pembuatan di mana UNION ALL bergabung kembali ke set hasil, bergabung dengan ID ke ParentId , yang tidak membatasi jumlah level.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menjatuhkan Batasan Kunci Asing di Database SQL Server - Tutorial SQL Server / TSQL Bagian 75

  2. Cara membuat Unique Constraint pada Kolom untuk Tabel yang sudah ada - Tutorial SQL Server / TSQL Part 97

  3. Inilah Tiga Alasan Mengapa Anda Mungkin Melihat Aktivitas Puncak di Instance SQL Anda

  4. Kueri hierarkis di SQL Server 2005

  5. Bagaimana Saya Menyisipkan Byte[] Ke dalam Kolom VARBINARY SQL Server