一尘不染

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

sql

示例:我有一些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文盲让我错过了简单的解决方案。


阅读 157

收藏
2021-03-08

共1个答案

一尘不染

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

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没有任何经验。

2021-03-08