如何解决如何从PostgreSQL获取所需格式的响应
我有三个桌子。课程,主题,副主题。它们都包含各自的名称,ID,描述等。 我的查询是从数据库中获取所有数据。
select course.course_id,course_name,course_description,topic.topic_id,topic_name,topic_description,subtopic.subtopic_id,subtopic_name
from
course join topic on course.course_id = topic.course_id
join subtopic on topic.topic_id = subtopic.topic_id
order by course.course_id,subtopic.subtopic_id;
我得到的格式是对象数组。所需的输出是
course:[
{
course_id:1,topics:[
{
topic_id:1,subtopics:[
subtopic_id:1
]
}
]
},...
...
...
]
是否有一种查询数据库的方式,使我的输出采用这种格式?也欢迎使用Javascript在这种格式中优化格式化数据的方法。
解决方法
您可以使用JSON聚合:
select c.course_id,c.course_name,c.course_description,jsonb_agg(
jsonb_build_object(
'topic_id',t.topic_id,'topic_name',t.topic_name,'topic_description',t.topic_description,'subtopics',st.subtopics
)
order by t.topic_id
) topics
from course c
inner join topic t on c.course_id = t.course_id
cross join lateral (
select jsonb_agg(
jsonb_build_object(
'subtopic_id',st.subtopic_id,'subtopic_name',st.subtopic_name
)
order by st.subtopic_id
) subtopics
from subtopic st
where st.topic_id = t.topic_id
) st
group by c.course_id
order by c.course_id
如果要由大JSONB对象构成标量结果,则可以添加另一级别的聚合,如结果集中所示:
select jsonb_build_object(
'courses',jsonb_agg(
jsonb_build_object(
'course_id',course_id,'course_name',course_name
'course_description',course_description
'topics',topics
)
)
order by order by course_id
) result
from (
select c.course_id,jsonb_agg(
jsonb_build_object(
'topic_id',st.subtopics
)
order by t.topic_id
) topics
from course c
inner join topic t on c.course_id = t.course_id
cross join lateral (
select jsonb_agg(
jsonb_build_object(
'subtopic_id',st.subtopic_name
)
order by st.subtopic_id
) subtopics
from subtopic st
where st.topic_id = t.topic_id
) st
group by c.course_id
) t
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。