目前,我正试图找到一种方法来检索表中的所有记录及其最近的关联子记录。简化的表结构如下:
Parents Children
______ ________
Id Id
Age ParentId
FirstName
LastName
DateCreated我想让所有的父母都知道他们最近创建的孩子的名字和姓氏(由DateCreated命令)。这些表在实践中非常大,我希望通过选择所有父母及其所有关联的子表获得一些性能,这是我目前通过以下查询获得的结果:
select * from parents p join children c on p.id = c.parentid然后用内存中的应用程序代码找到所需的结果。
所有的帮助都是感激的。
发布于 2020-06-30 16:45:12
您可以使用子查询进行筛选:
select p.*, c.firstname, c.lastname
from parents p
inner join children c on c.parentid = p.id
where c.datecreated = (
select max(c1.datecreated)
from children c1
where c1.parentid = c.parentid
) c另一种选择是横向连接:
select p.*, c.firstname, c.lastname
from parents p
cross apply (
select top (1) c.*
from children c
where c.parentid = p.id
order by c.datecreated desc
)发布于 2020-06-30 16:45:43
如果我正确理解,您可以使用横向连接(即apply):
select p.*, c.*
from parents p cross apply
(select top (1) c.*
from children c
where p.id = c.parentid
order by c.datecreated desc
) c;要获得最佳性能,需要在children(parentid, datecreated desc)上建立索引。
https://stackoverflow.com/questions/62662249
复制相似问题