sql >> Base de Datos >  >> RDS >> Sqlserver

Unir una tabla a sí misma

Puedes unir perfectamente la mesa consigo misma.

Sin embargo, debe tener en cuenta que su diseño le permite tener múltiples niveles de jerarquía. Dado que está utilizando SQL Server (suponiendo que sea 2005 o superior), puede hacer que un CTE recursivo obtenga su estructura de árbol.

Prueba de preparación de concepto:

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 - Niveles de 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