sql:从最近的子表条目中选择列

iqjalb3h  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(517)

我目前正试图找到一种方法来检索表中所有记录及其最近关联的子记录。简化的表结构如下所示:

Parents        Children
______         ________
Id             Id
Age            ParentId 
               FirstName
               LastName
               DateCreated

我期待着让所有的父母与他们最近创建的孩子的名字和姓氏(按顺序) DateCreated ). 这些表在实践中非常大,我希望在选择所有父级及其所有关联子级时获得一些性能,这是我目前通过以下查询得到的:

select * from parents p join children c on p.id = c.parentid

然后用内存中的应用程序代码找到所需的结果。
感谢所有的帮助。

vvppvyoh

vvppvyoh1#

如果我理解正确,您可以使用横向连接(即。 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) .

uqjltbpv

uqjltbpv2#

可以使用子查询进行筛选:

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
)

相关问题