Postgresql 如何在一个select语句中使用ID组合两个jsonb对象?

Postgresql 如何在一个select语句中使用ID组合两个jsonb对象?,postgresql,Postgresql,我不熟悉PostgresSQL上的jsonb操作。我的数据库中有两个表,其中一个包含一个json blob,另一个表的ID嵌套在其中: Table A id | content 1 | { oneKey: "something", params: {anotherKey: "something", tableBEntries: [1,2]}} 2 | { oneKey: "something2", params: {anotherKey: "something2", tableBEntrie

我不熟悉PostgresSQL上的jsonb操作。我的数据库中有两个表,其中一个包含一个json blob,另一个表的ID嵌套在其中:

Table A
id | content
1  | { oneKey: "something", params: {anotherKey: "something", tableBEntries: [1,2]}}
2  | { oneKey: "something2", params: {anotherKey: "something2", tableBEntries: [3]}}
...
我想从表A中选择条目,并将它们与表B结合起来,结果如下:

Result
id | content
1  | { oneKey: "something", params: {anotherKey: "something", tableBEntries: [{someKeysB: "values", anotherKeyB: "values"}, {someKeysB: "values2", anotherKeyB: "values2"}]}}
2  | { oneKey: "something2", params: {anotherKey: "something2", tableBEntries: [{someKeysB: "values3", anotherKeyB: "values3"}]}}
但是,我找不到这样做的方法,在一个简单的
select
语句中……只提取了
tableBEntries

select jsonb_array_elements(tableA.content->'params'->'tableBEntries')
谢谢你的帮助

  • 将数组展开为每个元素一行
  • 根据
    id
    from
    b
  • 相关a记录的
    b
    组内容
  • tableBEntries
    元素替换为聚合的b值
  • select jsonb_array_elements(tableA.content->'params'->'tableBEntries')
    
    SELECT
        jsonb_set(content, ARRAY['params','tableBEntries'], agg)                         -- 4
    FROM (
        SELECT 
            a.*,
            jsonb_agg(b.content) AS agg                                                  -- 3
        FROM
            a,
            jsonb_array_elements_text(content -> 'params' -> 'tableBEntries') as entries -- 1
        JOIN                                                                             -- 2
            b ON entries.value::int = b.id
        GROUP BY a.id, a.content 
    ) s