Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 返回自引用MSSQL表的父链ID_Sql Server_Common Table Expression - Fatal编程技术网

Sql server 返回自引用MSSQL表的父链ID

Sql server 返回自引用MSSQL表的父链ID,sql-server,common-table-expression,Sql Server,Common Table Expression,我想从子记录中获取父链不是父级或整个层次结构的所有子级 看看这里: 在“F.使用递归公共表表达式显示分层列表”这一点上,这接近于我想要做的,但只需要一个子行的父级(ID列表) 以下是我的数据: CREATE TABLE dbo.Stuff (StuffID int PRIMARY KEY NOT NULL, ParentID int NULL, [Name] varchar(25) NOT NULL, [Desc] text NULL) GO i

我想从子记录中获取父链不是父级或整个层次结构的所有子级

看看这里: 在“F.使用递归公共表表达式显示分层列表”这一点上,这接近于我想要做的,但只需要一个子行的父级(ID列表)

以下是我的数据:

CREATE TABLE dbo.Stuff  
    (StuffID int PRIMARY KEY NOT NULL,  
    ParentID int NULL,
    [Name] varchar(25) NOT NULL, 
    [Desc] text NULL)  
GO 

insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (1, null, 'My Home', '1203 WoodHaven Rd')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (2, 1, 'Basement', 'Walkout basement')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (3, 1, 'Level 1', 'Family room')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (4, 1, 'Level 2', 'Living/Kitchen')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (5, 1, 'Level 3', 'Bedrooms & Laundry')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (6, 1, 'Attic', 'attic space')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (7, 2, 'Family Room', 'Family game room')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (8, 2, 'Storeroom', 'Storage room')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (9, 2, 'Furnace', 'Furnace/Server room')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (10, 7, 'Closet', 'Under stairs junk closet')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (11, 9, 'Furnace floor', 'Furnace Room Floor (under desk)')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (12, 9, 'Furnace keyboard Shelf', 'Furnace room name desk shelf')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (13, 9, 'Furnace High Shelf', 'Furnace/Server room high shelf')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (14, 13, 'Router', 'ASUS AC router')
insert dbo.stuff (StuffID, ParentID, [Name], [Desc])
    VALUES (15, 13, 'Deprecated server', 'Old WinServer')
我想知道“路由器”在哪里。我预期的结果是: 1. 2. 9 13 14 我可能会按部分名称搜索它: 其中[Name]类似于“%rout%”

;with parents as
(
    select 
        StuffID, ParentID
    from 
        [Stuff]
    WHERE 
        [Name] LIKE '%rout%'
    union all
    select
        s.StuffID, s.ParentID
    from
        [Stuff] s
    join parents p on
        s.StuffID = p.ParentID
)
SELECT 
    StuffID 
from 
    parents
order by 
    StuffID

输出将是:1 2 7 13 14(与您的预期不同1 2 9 13 14,这是一个错误吗?

谢谢!这就是我想要的。是的,我的数据亲子关系有一个问题(我在我的示例中修复了这个问题)。