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

从SQL hasmany关系构造嵌套对象图

温浩大
2023-03-14
问题内容

示例:我有一些articlescomments并且我想要得到这样的东西:

[{
   title: "Article 1",
   content: "Super long article goes here",
   comments: [
      { author: "Troll", message: "You suck, Sir!" }, 
      { author: "SpamBot", message: "http://superawesomething.com/"}
   ]
},{
   title: "Article 2",
   content: "Another long article goes here",
   comments: [ ... ]
}]

现在,我看到两个解决方案:

  1. 首先获取文章,然后在具有一定IN条件的第二个查询中获取评论,最后将评论添加到相应的文章中。
  2. 好老加盟。对于我来说,我仍然不得不花很多时间处理数据才能进入我想要的结构。但是除此之外,我有点担心,因为有效载荷之类的articles.content将针对每个评论进行传输-除非有一种我不知道的连接方式。

我希望我的SQL文盲让我错过了简单的解决方案。


问题答案:

您可以使用聚合和/或子查询来执行此操作。就像是:

select title, content, json_agg(comments.author, comments.message) as comments
from articles 
join comments on articles.article_id = comments.article_id
group by article_id;

如果您需要将其汇总到一个字符串/ json /某物中,则将其包装到另一个汇总查询中,如下所示:

select json_agg(sub)
from (
  select title, content, json_agg(comments.author, comments.message) as comments
  from articles 
  join comments on articles.article_id = comments.article_id
  group by article_id) sub;

这是一个Postgres查询。对Mysql没有任何经验。



 类似资料:
  • 问题内容: 我在laravel中很难建立起非常嵌套的关系。 所需的行为如下, 我通过ID选择一个事件,我想查看哪些人已订阅该事件。 现在的问题是事件和人员之间有一些表格。 这是有效的查询! 事件模型 城市模型 公司模式 人物模型 我尝试过的 和 还有很多其他可能性,我真的很坚持。在laravel中实现这种嵌套关系链接如此困难吗? 谢谢! 问题答案: 如果只想从表中选择某些字段,请使用以下命令:

  • 在之前,创建一个有依赖其他模型的模型的时候,我们需要提前把依赖的模型给建立好,这样就非常麻烦,是不是有那么一种方法,在一个 create 里面把其他的依赖模型一起新建出来呢? 这一小节就来解决这个问题。这其中有一个坑(关于命名),让我调试的头皮发麻。 Book 与 User 的 belongs 关系 1. 保存关系 来到 book.ts , 首先保存一下 this.belongsTo 的返回值,在

  • 我面临的问题是我需要一个身份验证令牌来创建我的Retrofit服务。我目前使用可观察来获取所述令牌,导致一个相当丑陋的可观察构造: 我忍不住觉得这不是应该做的。我说得对吗?

  • 我猜myObjectToMarshall的编组已经正确完成。 但是,当我使用IntelliJ,调试最后一条指令时,我得到一个空文档: 是否有其他属性可设置?

  • 问题内容: 在我遇到的情况下,我认为对我来说唯一的选择是在彼此之间嵌套一些承诺。我有一个需要执行的Promise,以及一种在完成Promise之前会执行某些操作的方法。像这样: 但是,在我的Promise中,我需要执行另一个返回另一个Promise的方法: 但是现在,在该方法的语句中,我需要执行另一个方法,猜测是什么,然后返回另一个Promise: 所以最后,我有一个承诺,一个承诺之内,一个承诺之

  • 我正在研究如何将自定义构造与SnakeYAML一起使用,但不确定如何实现嵌套。我用这个例子作为参考。 在链接的示例中,相关的YAML和构造是, 现在,让我们将YAML更改为, 我想使用另一个来解析对象,但要在上下文中进行。我对关系的理解非常不稳定,我对如何在自定义构造函数中使用自定义构造函数感到困惑。有什么想法或资源吗?