如何从聚合 JSON 数组中抑制外键

问题描述 投票:0回答:1

使用

jsonb
和 Postgres 我遇到了以下问题:

我的输出如下所示:

[ {columnName: {}}, { columnName: {} } ]
但我希望它看起来像这样:
[ {}, {} ]

我想将所有对象放入

jsonb
数组中,但不添加列名称。

这是基本查询,可以在这个小提琴中看到:http://sqlfiddle.com/#!17/b701b8/2

我注意到,使用

array_agg()
时,不会添加列名称,但使用 JSON 时,会添加列名称。如何删除列名称以便我可以使用 JSON 获得所需的输出?

select json_agg(v)
from (
  select json_build_object('pos',pos, 'type',type, 'color',color)
  from (select * from images)a
  union all 
  select json_build_object('pos',pos, 'type',type, 'value',value)
  from (select * from letters)b
)v
sql arrays postgresql aggregate-functions jsonb
1个回答
0
投票

聚合而不是整行:

SELECT json_agg(v.image) AS images
FROM  (
   SELECT json_build_object('pos',pos, 'type',type, 'color',color) AS image  -- !
   FROM   images i -- simpler
   UNION ALL
   SELECT json_build_object('pos',pos, 'type',type, 'value',value)
   FROM   letters l  -- simpler
   ) v;

嵌套时更简单整行

SELECT json_agg(v.image) AS images
FROM  (   
   SELECT row_to_json(i) AS image
   FROM   images i

   UNION ALL
   SELECT row_to_json(l)
   FROM   letters l
   ) v;

小提琴

参见:

© www.soinside.com 2019 - 2024. All rights reserved.