Postgres 9.4:在SELECT上的jsonb数组中包含同级列

Postgres 9.4:在SELECT上的jsonb数组中包含同级列,json,postgresql,Json,Postgresql,如果我有这样一张桌子: office_id int employees jsonb 1 [{ "name" : "John" }, { "name" : "Jane" }] office_id,employees 1,[{ "name" : "John", "office_id" : 1 }, { "name" : "Jane", "office_id" : 1 }] id employees 1 [{ "name" : "John", "office_id" : 1 }, { "n

如果我有这样一张桌子:

office_id int
employees jsonb
1
[{ "name" : "John" }, { "name" : "Jane" }]
office_id,employees
1,[{ "name" : "John", "office_id" : 1 }, { "name" : "Jane", "office_id" : 1 }]
id  employees
1   [{ "name" : "John", "office_id" : 1 }, { "name" : "Jane", "office_id" : 1 }]
2   [{ "name" : "Jamal", "office_id" : 1 }]
数据如下所示:

office_id int
employees jsonb
1
[{ "name" : "John" }, { "name" : "Jane" }]
office_id,employees
1,[{ "name" : "John", "office_id" : 1 }, { "name" : "Jane", "office_id" : 1 }]
id  employees
1   [{ "name" : "John", "office_id" : 1 }, { "name" : "Jane", "office_id" : 1 }]
2   [{ "name" : "Jamal", "office_id" : 1 }]
是否有一种简单的查询方法,以使结果如下所示:

office_id int
employees jsonb
1
[{ "name" : "John" }, { "name" : "Jane" }]
office_id,employees
1,[{ "name" : "John", "office_id" : 1 }, { "name" : "Jane", "office_id" : 1 }]
id  employees
1   [{ "name" : "John", "office_id" : 1 }, { "name" : "Jane", "office_id" : 1 }]
2   [{ "name" : "Jamal", "office_id" : 1 }]
例如,查看以下SQLFIDLE:

结果应该是这样的:

office_id int
employees jsonb
1
[{ "name" : "John" }, { "name" : "Jane" }]
office_id,employees
1,[{ "name" : "John", "office_id" : 1 }, { "name" : "Jane", "office_id" : 1 }]
id  employees
1   [{ "name" : "John", "office_id" : 1 }, { "name" : "Jane", "office_id" : 1 }]
2   [{ "name" : "Jamal", "office_id" : 1 }]
我一直在通读这本书,似乎这是可能的,但我似乎无法理解。我宁愿不必在每个嵌套对象上存储office_id


注意:这与类似,但所需的输出不同。

我不确定您是从Postgres表还是json对象表中选择。可以使用json_agg()执行普通查询并将其转换为json

以下是一个普通查询:

ao_db=# SELECT * FROM record.instance;
                  id                  | created_by |          created_on           | modified_by |          modified_on          
--------------------------------------+------------+-------------------------------+-------------+-------------------------------
 18d8ca56-87b6-11e5-9c15-48d22415d991 | sysop      | 2015-11-10 23:19:47.181026+09 | sysop       | 2015-11-10 23:19:47.181026+09
 190a0e86-87b6-11e5-9c15-48d22415d991 | sysop      | 2015-11-10 23:19:47.56517+09  | sysop       | 2015-11-10 23:19:47.56517+09
 57611c9c-87b6-11e5-8c4b-48d22415d991 | admin      | 2015-11-10 23:21:32.399775+09 | admin       | 2015-11-10 23:22:27.975266+09
(3 行)
下面是通过json_agg()传递的相同查询:


你能提供更清晰的样本数据吗<代码>创建表和插入语句?现在看起来就像是从my_表中选择office_id,employees