繁体   English   中英

如何加入在PostgreSQL中从Json_array_elements返回的值?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM