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;