当前位置: 首页 > 面试题库 >

一对多查询,选择所有父母和每个父母的独生子女

傅涵忍
2023-03-14
问题内容

有两个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 =子表

我试图离开外部联接和GROUP BY,但是MSSQL Express告诉我,使用GROUP
BY进行查询需要在每个非Groupped字段上使用聚合函数。而且我不想将它们全部分组,而是选择第一行(具有自定义顺序)。

我完全没有主意…


问题答案:
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


 类似资料:
  • 实现一对多关系并选择父项和子项我有一个关系,我想进行查询(选择*) 文件夹。JAVA 作者。JAVA 我的请求: 我得到了这样的结果: 我的代码有什么问题?什么是问题,当我执行查询我得到了这个结果...我想得到这个结果

  • 问题内容: 我有以下标记: 我希望将样式设置为“一个”和“三个”。 但是,标记也可以是: 我尝试使用以下CSS: 但是,正如预期的那样,这是每个样式的第一个子元素的样式。 如何更改CSS,以便可以定位属于的第1个和第3个? 问题答案: 您不能仅凭CSS选择器来做到这一点。和兄弟组合器仅限于共享其父代的子代/兄弟姐妹,正如其名称所暗示的那样,并且CSS选择器无法解释父子结构的这种变化,也没有类似选择

  • 问题内容: 最初,我一直在尝试获取父母的名单以及每个父母的一个最近的孩子。我已经知道如何使用以下查询 但是问题是,结果不包括没有孩子的父母。添加也无济于事。所以我想我可以对所有没有孩子的父母进行查询,然后将这两个查询合并为一个查询。但是我在建立这样的查询时遇到了麻烦。将不胜感激任何建议。 问题答案: 这是您的查询:

  • 问题内容: 我有一个具有以下字段的MySQL表: 其中父字段表示上层ID。例如,水果id是1,橙色是水果之一,因此父对象是1。 但是我想做一个有效的MySQL查询来获取所有记录,格式为parent-> children-> parent-> children格式。我怎样才能做到这一点? 查询的结果记录应类似于: 问题答案: 您需要mysql不支持的递归联接。您唯一可以做的就是确定最大深度(由于p-

  • 问题内容: 我有这样设置的表: 如果Child中包含给定parent_id的 所有 行均符合涉及x和y的条件(在我的情况下,x = y),我想找到Parents或不同的parent_id 。 例如: 将会得到3。当前,我有一个查询,查找 任何子级 都符合条件的parent_ids 。然后,我用它来检索那些记录,并在所有子级都符合条件的情况下在代码中检查它们。通过示例数据,我得到parent_id

  • 问题内容: 当我需要调用也可以注入的父构造函数时,如何处理Guice?例如,我有一个抽象的父类,它有一个构造函数,该构造函数注入了所有派生子对象共享的对象,并且每个子对象也都有一个可注入的构造函数。 调用super()不会成功,因为Java希望我将对象作为参数传递,而不要让Guice注入。 谢谢 编辑:我想知道是否可能我需要使用方法注入? 问题答案: 如果您不使用Guice,则需要做与您做的完全相