1

我的 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"。照片是一个表,而不是一个模式。我似乎没有犯与这个看似相关的问题相同的错误。我不确定如何构建 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'
            }
        ]
    }
   ]
4

1 回答 1

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 函数9.3 版也有很好的 JSON 支持

于 2013-08-30T20:53:03.197 回答