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

Ambil semua data secara rekursif berdasarkan id induk

Ini dapat dilakukan di SQL Server 2005 dan di atasnya menggunakan Common Table Expressions (CTEs). Berikut ini tautan bagus dari MSDN yang menjelaskan kueri rekursif:Kueri Rekursif Menggunakan Ekspresi Tabel Umum

Ini contohnya:

Jika Anda membayangkan garis hierarki orang, kueri ini akan memungkinkan Anda melihat baris lengkap orang mana pun DAN menghitung tempat mereka dalam hierarki. Itu dapat dimodifikasi untuk menemukan hubungan anak apa pun.

Alih-alih ID orang tersebut, Anda menukar ID dari baris yang Anda gunakan sebagai orang tua Anda.

--Create table of dummy data
create table #person (
personID integer IDENTITY(1,1) NOT NULL,
name      varchar(255) not null,
dob       date,
father    integer
);

INSERT INTO #person(name,dob,father)Values('Pops','1900/1/1',NULL);  
INSERT INTO #person(name,dob,father)Values('Grandma','1903/2/4',null);
INSERT INTO #person(name,dob,father)Values('Dad','1925/4/2',1);
INSERT INTO #person(name,dob,father)Values('Uncle Kev','1927/3/3',1);
INSERT INTO #person(name,dob,father)Values('Cuz Dave','1953/7/8',4);
INSERT INTO #person(name,dob,father)Values('Billy','1954/8/1',3);

DECLARE @OldestPerson INT; 
SET @OldestPerson = 1; -- Set this value to the ID of the oldest person in the family

WITH PersonHierarchy (personID,Name,dob,father, HierarchyLevel) AS
(
   SELECT
      personID
      ,Name
      ,dob
      ,father,
      1 as HierarchyLevel
   FROM #person
   WHERE personID = @OldestPerson

   UNION ALL

   SELECT
    e.personID,
      e.Name,
      e.dob,
      e.father,
      eh.HierarchyLevel + 1 AS HierarchyLevel
   FROM #person e
      INNER JOIN PersonHierarchy eh ON
         e.father = eh.personID
)

SELECT *
FROM PersonHierarchy
ORDER BY HierarchyLevel, father;

DROP TABLE #person;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Contoh Konversi 'tanggal' ke 'datetime2' di SQL Server (T-SQL)

  2. Bagaimana menemukan catatan maksimum untuk rentang yang diberikan

  3. Hubungan Primary Key dan Clustered Index

  4. Masalah datetime dengan vb.net dan MSSQL

  5. Cara memasukkan data ke SQL Server