SQL从一组父级表中获取子级行

时间:2019-02-28 17:24:32

标签: sql sql-server

我有两个表,它们之间具有一对多的关系,第一个表称为父表,第二个表称为子表(表的真实/原始名称不完全是父表和子表,但我更改了名称以简化问题并使其更公开);我想为最近的父母插入所有的孩子,我想通过分组来实现,下面的查询返回我需要的结果,但是有什么办法让这个结果被组通过吗?

SELECT P.ID, C.* 
FROM
    (SELECT top 1 Parent.ID FROM Parent P ORDER BY P.CreatedOnDate  DESC) P
    INNER JOIN Children C ON P.Id = C.ParentID

我在下面创建了该文件,但是它不起作用,因为RowN不在子表中

SELECT 
    MAX(Children.Name),
    P.ID
    ROW_NUMBER OVER (PARTITION BY P.ID ORDER MY MAX(P.CreatedOnDate)) AS RowN
FROM Parent P 
INNER JOIN Children C ON P.Id = C.ParentID
WHERE RowN = 1
GROUP BY P.ID
ORDER BY P.CreatedOnDate DESC

1 个答案:

答案 0 :(得分:0)

我了解到您正在尝试选择最近创建的父母的孩子

如果是这样,则无需使用聚合。您可以简单地在现有endpoint = "MY_ENDPOINT" sendEmail() { const managerData = { toEmail: this.manager.managerEmail, managerName: this.manager.managerFirstName, managerEmail: this.manager.managerEmail, managerUUID: this.manager.managerUUID } this.httpClient.post(this.endpoint, managerData).subscribe(data => console.log('email sent: ', data)); } 查询中添加WHERE子句,并使用JOIN条件,确保选择的父记录是表中的最新记录:

NOT EXISTS

一个更有效的选择是使用窗口函数SELECT p.id, c.* FROM parent p INNER JOIN children c ON c.ParentID = p.id WHERE NOT EXISTS (SELECT 1 FROM parent p1 WHERE p1.CreatedOnDate > p.CreatedOnDate)

RANK() OVER()