【发布时间】:2021-07-18 04:48:12
【问题描述】:
我正在尝试在 SQL Server 中进行递归查询,以分层显示数据。这是表的结构
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar(100)] NOT NULL,
[Parent_Id] [int] NULL,
每个产品都有一个父级。 Parent_Id 列包含父级的 id。根产品的 parent_id 为 null。
我想创建一个分层显示产品的 sql 查询。下图是如何组织产品的示例。
产品可以有子产品。
对于上图,查询结果应该如下:
id name parent_id
1 P1 NULL
2 P2 NULL
3 P2-1 2
4 P2-2 2
5 P2-3 2
6 P2-3-1 5
7 P2-3-2 5
8 P3 NULL
9 P3-1 8
这是我为实现它而写的请求:
with tree as (select * from products
union all
select * from tree where parent_id = tree.id
)
select * from tree;
但我得到类似于以下的结果:
1 P1 NULL
2 P2 NULL
8 P3 NULL
3 P2-1 2
4 P2-2 2
5 P2-3 2
9 P3-1 8
6 P2-3-1 5
7 P2-3-2 5
我想要将每个产品同级分组,以便每个产品都显示在其直接父级下。
【问题讨论】:
-
您的代码没有意义。例如,
parent_id声明为not null,但在示例数据中它是null。
标签: sql sql-server tsql hierarchical-data recursive-query