sql >> Database >  >> RDS >> Sqlserver

Pak alle gegevens recursief op basis van een ouder-ID

Dit kan in SQL Server 2005 en hoger worden gedaan met behulp van Common Table Expressions (CTE's). Hier is een geweldige link van MSDN die recursieve zoekopdrachten beschrijft:Recursieve zoekopdrachten met behulp van algemene tabeluitdrukkingen

Hier is een voorbeeld:

Als u zich een hiërarchische lijn van mensen voorstelt, kunt u met deze query de volledige lijn van een persoon zien EN hun plaats in de hiërarchie berekenen. Het kan worden aangepast om elke onderliggende relatie te vinden.

In plaats van de ID van de persoon, verwissel je de ID van de rij die je als ouder gebruikt.

--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. Wat is de maximale vergoeding voor group_concat_max_len in MySQL?

  2. Prestaties van SUBSTR op CLOB

  3. Unieke beperking op twee velden en hun tegendeel

  4. hoe u invoer kunt ontsnappen, maar zonder escape kunt opslaan in de database