我的Postgres数据库有一个返回JSON的SQL API。
我有两个表:holidays
,其架构为name
,hd_id
。 photos
,这是当天拍摄的照片。其架构为url
,caption
,h_id
。
我想创建一个嵌套的json对象,如下面的那个。我正在运行的SQL是
SELECT holidays.name, holidays.h_id,
concat('[', group_concat(concat('{"src":"', photos.url, '","caption":"', photos.caption '"}', separater ','), ']') )
FROM holidays
INNER JOIN photos
ON holidays.h_id = photos.h_id
GROUP BY holidays.h_id
但是这给了我错误"schema "photos" does not exist"
。照片是一张桌子,而不是架构。我似乎没有和this seemingly related question犯同样的错误。我不确定如何构建JOIN。
这是所需的JSON输出。
[
{
name: 'Labor Day',
h_id: 'a1',
photos: [
{
src: 'url',
caption: 'text'
},
{
src: 'url',
caption: 'text'
}
]
},
{
name: 'MLK Day',
h_id: 'a2',
photos: [
{
src: 'url',
caption: 'text'
},
{
src: 'url',
caption: 'text'
}
]
}
]
答案 0 :(得分:1)
group_concat
中没有PostgreSQL
。您可以使用string_agg:
select
h.name, h.h_id,
'[' || string_agg('{"src":"' || p.url || '", "caption":"' || p.caption || '"}', ',') || ']'
from holidays as h
inner join photos as p on h.h_id = p.h_id
group by h.name, h.h_id
请参阅此示例中的sql fiddle demo
中还有很好的JSON支持