Postgresql Использование array_agg и jsonb_build_object
Я строю объект JSON из различных таблиц. Я успешно получил следующий код, чтобы почти сделать то, что я хочу. Единственная проблема в том, что агрегированный массив задан как другой объект, и я просто хочу, чтобы данные элемента в главном объекте указывали на выбранный массив строк.
SELECT jsonb_build_object('ok',false,'data',f1) FROM
(SELECT array_agg(f2) FROM (
SELECT c.catalogid,cl.title,cl.shortname FROM
shopmaster.catalog c LEFT JOIN
shopmaster.catalog_lang cl ON c.catalogid=cl.catalogid LEFT JOIN
shopmaster.lang l ON cl.langid=l.langid
WHERE inherit_from=3 AND code='en') f2) f1;
Это возвращает следующий JSON
{"ok": false, "data": {"array_agg": [{"title": "Vitamins", "catalogid": 6, "shortname": "vit"}, {"title": "Cheese Vitamins", "catalogid": 7, "shortname": "chevit"}, {"title": "fruitveg", "catalogid": 8, "shortname": "fruit and veg"}, {"title": "Magazines", (...)
Когда я хочу
{"ok": false, "data": [{"title": "Vitamins", "catalogid": 6, "shortname": "vit"}, {"title": "Cheese Vitamins", "catalogid": 7, "shortname": "chevit"}, {"title": "fruitveg", "catalogid": 8, "shortname": "fruit and veg"}, {"title": "Magazines", (...)
1 ответ
Как указано в предыдущем ответе, я мог бы выбрать названный результат, как f1.array_agg
, В конце концов, я использовал jsonb_agg()
функционировать так
SELECT jsonb_build_object('ok',false,'data',jsonb_agg(f1)) FROM (
SELECT c.catalogid,cl.title,cl.shortname FROM
shopmaster.catalog c LEFT JOIN
shopmaster.catalog_lang cl ON c.catalogid=cl.catalogid LEFT JOIN
shopmaster.lang l ON cl.langid=l.langid
WHERE inherit_from=3 AND code='en') f1