加入一张桌子给自己

Ali*_*ghi 1 sql sql-server recursion recursive-query sql-server-2008

这是我的数据库表模板上的一个.

Id int PK
Title nvarchar(10) unique
ParentId int 
Run Code Online (Sandbox Code Playgroud)

这是我的问题.如果我在"Id"和"ParentId"列之间创建关系,是否存在问题?(我的意思是创建表与自身之间的关系)我需要一些关于在插入或更新期间可能发生的问题或在开发步骤中删除操作的建议.谢谢

Adr*_*iro 5

你可以完美地加入桌子.

但是,您应该知道,您的设计允许您具有多个层次结构.由于您使用的是SQL Server(假设为2005或更高版本),因此可以使用递归CTE获取树结构.

概念准备证明:

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');
Run Code Online (Sandbox Code Playgroud)

查询1 - 节点级别:

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
Run Code Online (Sandbox Code Playgroud)