sql - 如何从 SQL Server 中基于父 id 的分层表中获取数据
问题描述
我有一个分层表类别,如下所示,root_id
父 ID 在哪里。
这里的意思root_id
是表的主键(这里是 ID)。
category1、category2、category2_ge属于questionnare1。
subcategory1, subcategory_ge1, subcategory2, subcategory_ge2 属于 category1
subcategory3 属于 category2,subcategory4 属于 category2_ge
ID name root_id level_id description language_id
-----------------------------------------------------------------------
1 questionnaire 0 1 desc1 1
2 category1 1 2 desc1 1
3 subcategory1 2 3 desc1 1
4 subcategory_ge1 2 3 desc1 2
5 subcategory2 2 3 desc2 1
6 subcategory_ge2 2 3 desc2 2
7 category2 1 2 desc2 1
8 category2_ge 1 2 desc2 2
9 subcategory3 7 3 desc3 1
10 subcategory4 8 3 desc4 1
创建和插入查询如下,我想使用 FOR JSON 获取如下数据
CREATE TABLE categories
(
ID int,
name varchar(255),
root_id int,
level_id int,
description nvarchar(max),
language_id int
);
INSERT INTO categories (ID, name, root_id, level_id, description, language_id)
VALUES (1, 'questionnaire', 0, 1, 'desc1', 1);
VALUES (2, 'category1', 1, 2, 'desc1', 1);
VALUES (3, 'subcategory1', 2, 3, 'desc1', 1);
VALUES (4, 'subcategory_ge1', 2, 3, 'desc1', 2);
VALUES (5, 'subcategory2', 2, 3, 'desc2', 1);
VALUES (6, 'subcategory_ge2', 2, 3, 'desc2', 2);
VALUES (7, 'category2', 1, 2, 'desc2', 1);
VALUES (8, 'category2_ge', 1, 2, 'desc2', 2);
VALUES (9, 'subcategory3', 7, 3, 'desc3', 1);
VALUES (10, 'subcategory4', 8, 3, 'desc4', 1);
所需数据如下
ID name root_id level_id questionnare_data
-------------------------------------------------------------------
1 questionnaire 1 0 {"questionnaire":{"ID":1,"name":"questionnaire", "level_id":1},"categories":{{"ID:2,"name":"category1","level_id":2,"subcategories":{{"ID":3,"name":"subcategory1","level_id":3},{"ID":4,"name":"subcategory_ge1","level_id":3},{"ID":5,"name":"subcategory2","level_id":3},{"ID":6,"name":"subcategory_ge2","level_id":3}}},{"ID":7",name":"category2","level_id":2,"subcategories":{{"ID":9,"name":"subcategory3","level_id":3}}},{"ID":8",name":"category2_ge","level_id":2,"subcategories":{{"ID":10,"name":"subcategory4","level_id":3}}}}}
为了简化我需要的 JSON,我已经简化如下
{"questionnaire":{"ID":1,"name":"questionnaire", "level_id":1},
"categories":{
{"ID:2,"name":"category1","level_id":2,
"subcategories":{
{"ID":3,"name":"subcategory1","level_id":3},
{"ID":4,"name":"subcategory_ge1","level_id":3},
{"ID":5,"name":"subcategory2","level_id":3},
{"ID":6,"name":"subcategory_ge2","level_id":3}
}
},
{"ID":7",name":"category2","level_id":2,
"subcategories":{
{"ID":9,"name":"subcategory3","level_id":3}
}
},
{"ID":8",name":"category2_ge","level_id":2,
"subcategories":{
{"ID":10,"name":"subcategory4","level_id":3}
}
}
}
}
我如何实现这一目标?
我的 SQL 版本是 Microsoft SQL Server 2016
我尝试使用在Select all hierarchy level and below SQL Server中找到的解决方案,但这是一个不同的场景
解决方案
推荐阅读
- node.js - nodejs express + create-react-app oauth2.0 error 401 'Invalid access token' Spotify API
- java - Liferay 7.1.3 GA4 自定义 Portlet 与番石榴依赖部署:灾难性初始化失败!TypeNotPresentExceptionProxy
- java - 使用 Apache Beam FileIO 时如何避免截断数据
- mongodb - 通过 id 数组删除整个对象
- javascript - 如何从输入掩码中删除此警告
- kubernetes - 以编程方式颁发 Kubernetes 证书
- h2 - Guidewire H2 升级异常
- python - Python Fancy Indexing Assignments:不能将 3 个输入值分配给掩码为 true 的 6 个输出值
- css - React - Antd 模态最大宽度 [Modal.info() 方法]
- c# - Visual Studio C# 控制台不显示顶行