sql - 在一个 SQL 语句中检索列表列表
问题描述
我有两张表(比如说)Person 和 Parent,Parent-Person 是多对一的关系,所以一个人可以有很多父母,直接的和间接的(祖父母等)。Parent有外键personId,Person的主键当然是personId。
Person table
Id <PK>
Parent table
Id<PK>
ParentPersonId <FK into Person >
Person has rows with values PK
1
2
3
Parent has rows with values
1, 2
1, 3
2, 3
so person 1 has parents 2, 3
I eapect to get List<Person>
[ {1, {2,3}}, {2, {3}}, {3} ]
我正在使用 Spring Boot JDBC 来查询 MS SQL 服务器数据库,我可以获得 personId 的所有父母,当然,我可以获得 Person 表中所有人的列表。但是是否有可能在一个 SQL 语句中检索所有人员的列表,并在人员类中检索作为与父表连接的结果的人员 ID 列表?
还是我必须分两步完成。获取人员列表,然后在数据库中查询每个人的父母列表?
我正在尝试做这样的事情,但它说“语法错误”。
select ID as personId (select * from Parent where personId = parentPersonId) from Person
解决方案
假设您在 Parent 表中的数据不是递归的(该表包含每个祖先的一行,直接或间接),您可以使用一个简单的查询:
select per.id, par.parentPersonId
from Person per left join Parent par
on per.id = par.id
如果您的数据是递归的(显然不是,因为 3 既是 1 的父母又是祖父母),您需要使用递归 CTE 查询。请参阅我的后续问题中的代码Is branch pruning possible for recursive cte query
推荐阅读
- javascript - Webpack CommonJS 命名导出
- javascript - 如何创建带有徽标的导航栏链接菜单以及用于某些选项和搜索栏的下拉列表?
- docker - Docker 无法创建卷 /usr/share/nginx/html/image
- .net - nuget 和直接引用 dll 的工作方式不同
- java - 我想审核 alfresco 搜索表单中使用的搜索参数
- javascript - 如何在邮件回复中添加页脚
- python - 如何通过 python Tkinter 绘制智能拖放折线?
- c# - 来自同一主机上的 Invoke-WebRequest 的 WCF 客户端证书身份验证
- express - Jest - 快速测试
- javascript - 如何将未命名的函数转换为已命名的函数?