![](/img/trans.png)
[英]PostgreSQL json_array_elements with array indexes (keys)
[英]how to join on the values returned from Json_array_elements in postgresql?
“订单”表的结构:
objectId text,
subOrders jsonb
Jsonb的结构:jsonb对象的数组。 例如。
[
{
"className":"SubOrder",
"__type":"Pointer",
"objectId":"tIENf1PCHO"
},
{
"className":"SubOrder",
"__type":"Pointer",
"objectId":"yKVDFEuWx7"
}
]
“ SubOrder”表的结构:
objectId text,
orderitems jsonb
suborder.orderitems jsonb的结构,例如:
[
{
"className":"SubOrderItem",
"__type":"Pointer",
"objectId":"6d1DLrmOTD"
},
{
"className":"SubOrderItem",
"__type":"Pointer",
"objectId":"xK6mR2PDDU"
}
]
我需要将Order.suborders.objectId
与suborder.objectid
AS Order.suborders列是对象的jsonb数组,我将数组元素如下。
select jsonb_array_elements("subOrders")->>'objectId'
from "Order"
然后是将返回的objectId与Suborder表联接在一起的问题。
将函数调用放入FROM
子句中,然后在以后取消引用JSON对象的实际字段。
select o.object_id, so.*
from "Order" o
cross join lateral jsonb_array_elements(sub_orders) j(suborder)
join sub_order so on so.object_id = j.suborder ->> 'objectId'
在线示例: http : //rextester.com/GQBF88668
我会使用WITH查询
WITH suborders_object AS(
select jsonb_array_elements("subOrders")->>'objectId' AS obid from Order
)
SELECT * FROM suborders_object JOIN Order ON (suborders_object.obid = Order.id);
或您喜欢像表格一样加入suborders_object的任何方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.