gpt4 book ai didi

sql - 一对多查询选择所有父级和每个父级的单个顶级子级

转载 作者:行者123 更新时间:2023-12-02 01:56:57 25 4
gpt4 key购买 nike

有两个 SQL 表:

Parents:
+--+---------+
|id| text |
+--+---------+
| 1| Blah |
| 2| Blah2 |
| 3| Blah3 |
+--+---------+

Childs
+--+------+-------+
|id|parent|feature|
+--+------+-------+
| 1| 1 | 123 |
| 2| 1 | 35 |
| 3| 2 | 15 |
+--+------+-------+

我想使用单个查询选择“Parents”表中的每一行,以及“Childs”表中具有关系“parent”-“id”值和最大“feature”列值的每一行。在此示例中,结果应为:

+----+------+----+--------+---------+
|p.id|p.text|c.id|c.parent|c.feature|
+----+------+----+--------+---------+
| 1 | Blah | 1 | 1 | 123 |
| 2 | Blah2| 3 | 2 | 15 |
| 3 | Blah3|null| null | null |
+----+------+----+--------+---------+

其中 p = 父表,c = 子表

我尝试使用 LEFT OUTER JOIN 和 GROUP BY,但 MSSQL Express 告诉我,使用 GROUP BY 进行查询需要在每个非分组字段上使用聚合函数。我不想将它们全部分组,而是选择顶行(使用自定义排序)。

我完全没有想法......

最佳答案

select p.id, p.text, c.id, c.parent, c.feature
from Parents p
left join (select c1.id, c1.parent, c1.feature
from Childs c1
join (select p1.id, max(c2.feature) maxFeature
from Parents p1
left join Childs c2 on p1.id = c2.parent
group by p1.id) cf on c1.parent = cf.id
and c1.feature = cf.maxFeature) c
on p.id = c.parent

关于sql - 一对多查询选择所有父级和每个父级的单个顶级子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com