Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Joindre une table à elle-même

Vous pouvez parfaitement rejoindre la table avec elle-même.

Vous devez cependant savoir que votre conception vous permet d'avoir plusieurs niveaux de hiérarchie. Puisque vous utilisez SQL Server (en supposant 2005 ou supérieur), vous pouvez avoir un CTE récursif pour obtenir votre structure arborescente.

Préparation de la preuve de concept :

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

Requête 1 - Niveaux de nœud :

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