在一个SQL语句中检索列表列表

问题描述 投票:0回答:1

我有两个表(例如)人与父母,父母与人之间是一对多的关系,因此一个人可以有很多父母,有直接父母和间接父母(祖父母等)。父级具有外键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 Server数据库,我可以获取personId的所有父级,当然,我可以获取Person表中所有人员的列表。但是,是否可以在一条SQL语句中检索所有人员列表以及类人员中的人员ID列表,这些列表是与Parent表联接的结果?]

或者我必须分两个步骤进行。获取人员列表,然后在数据库中查询每个人的父母列表?

我正在尝试执行类似的操作,但显示'语法错误'。

 select ID as personId (select * from Parent where Parent.ID = parentPersonId) from Person
sql sql-server spring-boot spring-jdbc
1个回答
0
投票

假设您在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]中的代码

© www.soinside.com 2019 - 2024. All rights reserved.