我的一张桌子上有jsonb
jsonb看起来像这样
my_data : [
{pid: 1, stock: 500},
{pid: 2, stock: 1000},
...
]
pid引用products
'表id
(即pid
)
编辑:表产品具有以下属性:pid
(PK),name
我想在JSONB中循环my_data[]
并从产品表中获取pid
的名称。
我需要结果看起来像这样(包括第二张表中的产品名称)->
my_data : [
{
product_name : "abc",
pid: 1,
stock : 500
},
...
]
我应该如何执行这样的jsonb内部联接?
编辑:-尝试了S-Man的解决方案,但出现此错误
“对表\” jc \“的FROM子句条目的引用无效
这是 SQL QUERY
答案 0 :(得分:1)
SELECT
jsonb_build_object( -- 5
'my_data',
jsonb_agg( -- 4
elems || jsonb_build_object('product_name', mot.product_name) -- 3
)
)
FROM
mytable,
jsonb_array_elements(mydata -> 'my_data') as elems -- 1
JOIN
my_other_table mot ON (elems ->> 'pid')::int = mot.pid -- 2
::int
强制转换,因为否则它将是文本值)||
运算符my_data
元素中另一种方法是使用jsonb_set()
而不是第5步,直接将阵列重置为原始阵列:
SELECT
jsonb_set(
mydata,
'{my_data}',
jsonb_agg(
elems || jsonb_build_object('product_name', mot.product_name)
)
)
FROM
mytable,
jsonb_array_elements(mydata -> 'my_data') as elems
JOIN
my_other_table mot ON (elems ->> 'pid')::int = mot.pid
GROUP BY mydata