Cela peut être fait dans SQL Server 2005 et au-delà en utilisant des expressions de table communes (CTE). Voici un lien de MSDN décrivant les requêtes récursives: Recursive Queries Using Common Table Expressions
Voici un exemple:
Si vous imaginez une ligne hiérarchique de personnes, cette requête vous permettra de voir la ligne complète de toute personne et calculera leur place dans la hiérarchie. Il peut être modifié pour trouver une relation enfant. À la place de l'ID de la personne, vous permutez l'ID de la ligne que vous utilisez comme parent.
--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;
Quelle base de données et quelle version utilisez-vous? Toutes les bases de données ne prennent pas en charge les requêtes récursives. –