我已经看到了很多关于此的例子,但没有一个完全符合我的要求......而且我很难搞清楚它。 (我看到的所有例子都将结果列在2栏中......我不需要那样)
我有一个名为'Documents'的表,有2列
像这样...
CREATE TABLE [dbo].[Document](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ParentId] [int] NULL
)
这样填充......
INSERT INTO [dbo].[Document] SELECT 1, NULL;
INSERT INTO [dbo].[Document] SELECT 2, 1;
INSERT INTO [dbo].[Document] SELECT 3, 2;
INSERT INTO [dbo].[Document] SELECT 4, NULL;
INSERT INTO [dbo].[Document] SELECT 5, 4;
INSERT INTO [dbo].[Document] SELECT 6, NULL;
我需要以递归方式遍历父子关系(直到NULL)&获取所有Id的列表到一个列中,如此...
答案 0 :(得分:3)
(我假设你使用SQL Server的语法。)
您可以使用递归CTE:
with cte as (
select id, parentid, 1 as lev
from document d
where id = 3
union all
select d.id, d.parentid, lev + 1
from cte join
document d
on cte.parentid = d.id
)
select id
from cte
order by lev;
Here是一个SQL小提琴。
注意:您不能(通常)插入声明为identity
的列。如果您想要输入值,请删除identity()
属性。