sql >> Database teknologi >  >> RDS >> Sqlserver

Grib rekursivt alle data baseret på et forældre-id

Dette kan gøres i SQL Server 2005 og nyere ved hjælp af Common Table Expressions (CTE'er). Her er et godt link fra MSDN, der beskriver rekursive forespørgsler:Rekursive forespørgsler, der bruger almindelige tabeludtryk

Her er et eksempel:

Hvis du forestiller dig en hierarkisk række af personer, vil denne forespørgsel lade dig se hele linjen for enhver person OG beregne deres plads i hierarkiet. Det kan modificeres for at finde et hvilket som helst børneforhold.

I stedet for personens id, bytter du id'et på den række, du bruger som din forælder.

--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. Heroku Postgres:Denne forbindelse er blevet lukket

  2. MySQL COUNT() – Få antallet af rækker, der skal returneres af en forespørgsel

  3. mysql datatype til kun at gemme måned og år

  4. hvordan man indstiller django og mysql til at fungere med UTF-8