简体   繁体   English

PostgreSQL json_build_object 嵌套

[英]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.

相关问题 在PostgreSQL中使用json_build_object和json_build_array排序json结构 - Ordering json structure using json_build_object and json_build_array in Postgresql 无法使用 json_build_object 从 postgreSQL 查询创建大型 json 对象 - Unable to create a large json object from a postgreSQL query using json_build_object PostgreSQL Json_build_object / json_agg 添加聚合级别 - PostgreSQL Json_build_object / json_agg add level of aggregation json_build_object()中的大小写表达式 - Case expression in json_build_object() 在 PostgreSQL v14.x 中使用 json_build_object 和 SELECT 语句的结果 - Using json_build_object in PostgreSQL v14.x with the result of a SELECT statement 使用 json_agg(json_build_object(.......)) 时,如何确保 json_build_object 返回空列表 - when use json_agg(json_build_object(.......)) ,how to ensure json_build_object return empty list 如何在 Postgres 的 json_build_object() 中进行 GROUP BY 和 COUNT - How to do a GROUP BY and COUNT within json_build_object() in Postgres 如何将多个 JSON_BUILD_OBJECT 条目添加到 JSON_AGG - How to Add Multiple JSON_BUILD_OBJECT entries to a JSON_AGG SQL,在使用 json_agg 和 json_build_object 时遇到一些问题 - SQL, having some trouble with json_agg & json_build_object PostgresSQL 无法按 json_build_object 结果排序(从子查询获得) - PostgresSQL Cannot order by json_build_object result (got from subquery)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM