[英]PostgreSQL json_build_object nested
First things first: I'm using PostgreSQL 11.6, compiled by Visual C++ build 1800, 64-bit.第一件事:我使用的是 PostgreSQL 11.6,由 Visual C++ build 1800 编译,64 位。 :) :)
Im trying to create a JSON object directly from the database.我试图直接从数据库创建一个 JSON 对象。
My desired result is我想要的结果是
{
"1": [],
"2": [],
"3": []
}
Imagine my tables like:想象一下我的表是这样的:
MyIdTable
_id_|__key__
1 test1
2 test2
3 test3
MyKeyValueTable
__id__|__fkidmyidtable__|__value__
1 1 test
2 1 test1
3 2 test2
4 2 test3
Now I create a query现在我创建一个查询
select
json_build_object(
a.id,
json_agg(
b.*
)
)
from "MyIdTable" a
inner join "MyKeyValueTable" b on a.id = b.fkidmyidtable group by a.id
This will get me as result, multiple rows with the desired result:这将使我成为结果,具有所需结果的多行:
row 1: {
"1": [{ "id": 1, "fkidmyidtable": 1, "value": "test" }, { "id": 2, "fkidmyidtable": 1, "value": "test1" }]
}
row 2: {
"2": [{ "id": 3, "fkidmyidtable": 2, "value": "test2" }, { "id": 4, "fkidmyidtable": 2, "value": "test3" }]
}
After this I can use json_agg() to create almost my desired result.在此之后,我可以使用 json_agg() 来创建几乎我想要的结果。 The issue is that it will create问题是它会创建
[ { "json_build_object": {"1": [{ "id": 1, "fkidmyidtable": 1, "value": "test" }, { "id": 2, "fkidmyidtable": 1, "value": "test1" }]}, "json_build_object": { "2": [{ "id": 3, "fkidmyidtable": 2, "value": "test2" }, { "id": 4, "fkidmyidtable": 2, "value": "test3" }] }]
I would like to know if its possible to write a query to merge my created object into one json object like:我想知道是否可以编写一个查询来将我创建的对象合并到一个 json 对象中,例如:
{
"1": [{ "id": 1, "fkidmyidtable": 1, "value": "test" }, { "id": 2, "fkidmyidtable": 1, "value": "test1" }],
"2": [{ "id": 3, "fkidmyidtable": 2, "value": "test2" }, { "id": 4, "fkidmyidtable": 2, "value": "test3" }]
}
Thank you very much in advance for taking the time to read :)!非常感谢您花时间阅读:)!
If I followed you correctly, you can add another level of aggregation and use json_object_agg()
:如果我正确地跟随您,您可以添加另一个级别的聚合并使用json_object_agg()
:
select json_object_agg(id, js) res
from (
select a.id, json_agg(b.*) js
from "MyIdTable" a
inner join "MyKeyValueTable" b on a.id = b.fkidmyidtable
group by a.id
) t
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.