如何编写SQL查询包及子包需求并生成资质条款需求汇总表?
查询指定包及其子包的所有需求SQL方案
1. 假设数据库表结构
先明确常见的需求管理数据库表结构(需根据实际库表调整字段/表名):
packages表:存储包信息,字段包括id(包ID)、name(包名称)、parent_id(父包ID,顶级包为NULL)requirements表:存储需求信息,字段包括alias(需求别名)、name(需求名称)、verification_method(验证方法)、package_id(所属包ID)
2. 递归查询指定包的所有子包ID
用递归CTE(Common Table Expression)获取目标包及其所有层级子包的ID:
WITH RECURSIVE package_hierarchy AS ( -- 起始:指定目标包的ID,替换成你要查询的包ID SELECT id FROM packages WHERE id = '目标包ID' UNION ALL -- 递归:查询所有子包 SELECT p.id FROM packages p JOIN package_hierarchy ph ON p.parent_id = ph.id )
3. 关联需求表获取目标字段
把上面的包层级CTE和需求表关联,查询需要的字段:
WITH RECURSIVE package_hierarchy AS ( SELECT id FROM packages WHERE id = '目标包ID' UNION ALL SELECT p.id FROM packages p JOIN package_hierarchy ph ON p.parent_id = ph.id ) SELECT r.alias AS "别名", r.name AS "名称", r.verification_method AS "验证方法" FROM requirements r JOIN package_hierarchy ph ON r.package_id = ph.id ORDER BY r.package_id, r.name;
4. 调整说明
- 替换
'目标包ID'为实际要查询的包ID,若按包名称查询,把第一行改成SELECT id FROM packages WHERE name = '目标包名称' - 若表名/字段名不同(比如
verification_method叫verify_way),直接替换对应名称即可 - 如需过滤特定状态的需求,比如只查已生效的,在最后加
WHERE r.status = '生效'这类条件
5. 生成资质条款表格示例
把查询结果导出或复制后,整理成Markdown表格:
| 别名 | 名称 | 验证方法 |
|---|---|---|
| REQ001 | 用户身份验证 | 人工审核日志 |
| REQ002 | 数据加密传输 | 自动化工具扫描 |
内容的提问来源于stack exchange,提问作者Mikkie
相关产品推荐
相关产品推荐

