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

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

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

  1. Parents Children
  2. ______ ________
  3. Id Id
  4. Age ParentId
  5. FirstName
  6. LastName
  7. DateCreated

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

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

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

vvppvyoh

vvppvyoh1#

如果我理解正确,您可以使用横向连接(即。 apply ):

  1. select p.*, c.*
  2. from parents p cross apply
  3. (select top (1) c.*
  4. from children c
  5. where p.id = c.parentid
  6. order by c.datecreated desc
  7. ) c;

为了获得最佳性能,您需要在 children(parentid, datecreated desc) .

uqjltbpv

uqjltbpv2#

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

  1. select p.*, c.firstname, c.lastname
  2. from parents p
  3. inner join children c on c.parentid = p.id
  4. where c.datecreated = (
  5. select max(c1.datecreated)
  6. from children c1
  7. where c1.parentid = c.parentid
  8. ) c

另一种选择是横向连接:

  1. select p.*, c.firstname, c.lastname
  2. from parents p
  3. cross apply (
  4. select top (1) c.*
  5. from children c
  6. where c.parentid = p.id
  7. order by c.datecreated desc
  8. )
展开查看全部

相关问题