Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Unir uma tabela a ela mesma


Você pode perfeitamente juntar a mesa com ela.

No entanto, você deve estar ciente de que seu design permite que você tenha vários níveis de hierarquia. Como você está usando o SQL Server (assumindo 2005 ou superior), você pode ter uma CTE recursiva para obter sua estrutura de árvore.

Preparação da prova de conceito:
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');

Consulta 1 - Níveis de nó:
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