1

JSON を返す Postgres データベースへの SQL API があります。

私は 2 つのテーブルを持っています: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"。Photos はテーブルであり、スキーマではありません。この一見関連する質問と同じ間違いをしているようには見えません。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_concatstring_aggPostgreSQLを使用できます:

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 に答える