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

Slut dig til et bord for sig selv

Du kan perfekt slutte dig til bordet med sig selv.

Du skal dog være opmærksom på, at dit design giver dig mulighed for at have flere niveauer af hierarki. Da du bruger SQL Server (forudsat 2005 eller højere), kan du få en rekursiv CTE til at få din træstruktur.

Bevis på konceptudarbejdelse:

declare @YourTable table (id int, parentid int, title varchar(20))

insert into @YourTable values
(1,null, 'root'),
(2,1,    'something'),
(3,1,    'in the way'),
(4,1,    'she moves'),
(5,3,    ''),
(6,null, 'I don''t know'),
(7,6,    'Stick around');

Forespørgsel 1 - Nodeniveauer:

with cte as (
    select Id, ParentId, Title, 1 level 
    from @YourTable where ParentId is null

    union all

    select yt.Id, yt.ParentId, yt.Title, cte.level + 1
    from @YourTable yt inner join cte on cte.Id = yt.ParentId
)
select cte.*
from cte 
order by level, id, Title


  1. Hvad er den bedste praksis for primærnøgler i tabeller?

  2. MySQL-forespørgsel for at få kolonnenavne?

  3. Mysql High UPDATE SELECT forårsager forsinkelse

  4. 6 almindelige fejlscenarier for MySQL og MariaDB, og hvordan man løser dem