在PostgreSQL中使用Sub Select获取子数据

时间:2017-11-06 20:48:10

标签: node.js postgresql

我有一个PostgreSQL数据库,如下所示:

content
id     title      content
1      Home       Welcome to the homepage

-

fields
id    contentID   value
1     1           Field Value 1
2     1           Field Value 2
3     2           Field value in other content

我正在尝试编写一个结合两者数据的查询,最终出现:

[   {     标题:'家',     内容:'欢迎来到主页',     领域:[      {        id:1,        contentID:1,        值:'字段值1'      },      {        id:2,        contentID:1,        值:'字段值2'      }     ]   } ]

以下是我尝试的查询,希望在一个查询中执行所有操作:

let data = await query(`SELECT *, (SELECT array(SELECT * FROM stuff.fields WHERE stuff.fields.contentID=stuff.content.id)) as fields FROM stuff.content`);

请注意stuff是模式名称,我对PostgreSQL来说是新手,但我喜欢它与MySQL相比的数据灵活性和速度,我不认为MySQL可以做这样的事情。

1 个答案:

答案 0 :(得分:1)

预期输出看起来像json。使用jsonb functions

project.assets.json

得到这个json:

select to_jsonb(c)- 'id' || jsonb_build_object('fields', jsonb_agg(to_json(f)))
from content c
join fields f on c.id = f.content_id
group by c.id;