配列に入れ子になったオブジェクトでjson列が埋め込まれたpostgresql表があります。今は、json列のオブジェクトのidと連結された文字列値を返すクエリを作成します。 PostgreSQLのバージョンは9.5です。postgresql json配列のオブジェクトの文字列値を連結する
例データは
CREATE TABLE test
(
id integer,
data json
);
INSERT INTO test (id, data) VALUES (1, '{
"info":"a",
"items":[
{ "name":"a_1" },
{ "name":"a_2" },
{ "name":"a_3" }
]
}');
INSERT INTO test (id, data) VALUES (2, '{
"info":"b",
"items":[
{ "name":"b_1" },
{ "name":"b_2" },
{ "name":"b_3" }
]
}');
INSERT INTO test (id, data) VALUES (3, '{
"info":"c",
"items":[
{ "name":"c_1" },
{ "name":"c_2" },
{ "name":"c_3" }
]
}');
はかなり意図一例として機能していない
これまでのところ私は1つに追加された文字列をなし、残念ながら、テーブルから値を取得することができました別の出力されます
SELECT
row.id,
item ->> 'name'
FROM
test as row,
json_array_elements(row.data #> '{items}') as item;
:
id | names
----------
1 | a_1
1 | a_2
1 | a_3
2 | b_1
2 | b_2
2 | b_3
3 | c_1
3 | c_2
3 | c_3
意図した出力例が
どのようにクエリはそのようになりますが、この出力を返しますか?配列に第二列のSQLを変更することにより
id | names
----------
1 | a_1, a_2, a_3
2 | b_1, b_2, b_3
3 | c_1, c_2, c_3
キーの順序付けと間隔のようなJSONの詳細を取得する必要がない限り、JSONBタイプが優先されることに注意してください。 JSONはJSONの正確なテキストコピーを保存し、JSONBはより効率的なバイナリ形式で保存します。 https://www.postgresql.org/docs/9.5/static/datatype-json.html – Schwern
ヒントをお寄せいただきありがとうございます。実際のデータはjsonbです。例はjsonです。私が知る限り、jsonとjsonbの列の型は同じです。 – Simono
ヒント: 'string_agg' https://www.postgresql.org/docs/9.5/static/functions-aggregate.html – jcaron