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

Unisci un tavolo a se stesso

Puoi unirti perfettamente al tavolo da solo.

Dovresti essere consapevole, tuttavia, che il tuo design ti consente di avere più livelli di gerarchia. Poiché stai utilizzando SQL Server (supponendo 2005 o versioni successive), puoi fare in modo che un CTE ricorsivo ottenga la tua struttura ad albero.

Preparazione della prova di concetto:

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 - Livelli di nodo:

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