sql >> Database >  >> RDS >> Sqlserver

Deelnemen aan een tafel voor zichzelf

Je kunt er zelf perfect mee aan tafel.

U moet zich er echter van bewust zijn dat uw ontwerp meerdere hiërarchische niveaus mogelijk maakt. Aangezien u SQL Server gebruikt (uitgaande van 2005 of hoger), kunt u een recursieve CTE uw boomstructuur laten ophalen.

Proof of concept voorbereiding:

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');

Query 1 - Knooppuntniveaus:

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. Indexeert MySQL NULL-waarden?

  2. Waarom voegt TO_CHAR spatie toe (één wit teken) aan het begin van een getal?

  3. Kolomnaam en/of tabelnaam als parameters

  4. XML doorgeven als parameter aan opgeslagen procedure in Oracle