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