gpt4 book ai didi

sql - SQL Server递归自联接

转载 作者:行者123 更新时间:2023-12-04 20:38:17 24 4
gpt4 key购买 nike

我有一个简单的类别表,包括以下各列:


ID
名称
ParentId


因此,无限数量的类别可以是类别的子级。以以下层次结构为例:

enter image description here

我想在一个返回类别“ Business Laptops”的简单查询中,还返回一个包含所有父项,逗号分隔符或其他内容的列:

enter image description here

或采取以下示例:

enter image description here

最佳答案

递归cte进行救援。

创建并填充示例表(请在以后的问题中保存此步骤):

DECLARE @T as table
(
id int,
name varchar(100),
parent_id int
)

INSERT INTO @T VALUES
(1, 'A', NULL),
(2, 'A.1', 1),
(3, 'A.2', 1),
(4, 'A.1.1', 2),
(5, 'B', NULL),
(6, 'B.1', 5),
(7, 'B.1.1', 6),
(8, 'B.2', 5),
(9, 'A.1.1.1', 4),
(10, 'A.1.1.2', 4)


CTE:

;WITH CTE AS
(
SELECT id, name, name as path, parent_id
FROM @T
WHERE parent_id IS NULL
UNION ALL
SELECT t.id, t.name, cast(cte.path +','+ t.name as varchar(100)), t.parent_id
FROM @T t
INNER JOIN CTE ON t.parent_id = CTE.id
)


查询:

SELECT id, name, path
FROM CTE


结果:

id      name        path
1 A A
5 B B
6 B.1 B,B.1
8 B.2 B,B.2
7 B.1.1 B,B.1,B.1.1
2 A.1 A,A.1
3 A.2 A,A.2
4 A.1.1 A,A.1,A.1.1
9 A.1.1.1 A,A.1,A.1.1,A.1.1.1
10 A.1.1.2 A,A.1,A.1.1,A.1.1.2


See online demo on rextester

关于sql - SQL Server递归自联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42955335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com