【问题标题】:how to join on the values returned from Json_array_elements in postgresql?如何在 postgresql 中加入从 Json_array_elements 返回的值?
【发布时间】:2018-04-11 05:06:23
【问题描述】:

“订单”表的结构:

objectId text, 
subOrders jsonb

jsonb结构:jsonb对象数组。例如。

[
   {
      "className":"SubOrder",
      "__type":"Pointer",
      "objectId":"tIENf1PCHO"
   },
   {
      "className":"SubOrder",
      "__type":"Pointer",
      "objectId":"yKVDFEuWx7"
   }
]

“子订单”表的结构:

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表连接起来的问题。

【问题讨论】:

  • @a_horse_with_no_name 感谢您编辑问题。请帮忙。

标签: sql postgresql


【解决方案1】:

将函数调用放入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

【讨论】:

  • 我的查询是这样的select o.*, j.*, ot.* from "Order" o cross joinlateral select jsonb_array_elements("subOrders")->>'objectId' as j(object_id)从“订单”加入“子订单”ot on ot。“objectId”=j.object_id;我的错误是“->>”第 3 行或附近的语法错误:...oss joinlateral jsonb_array_elements("subOrders")->>'object... 请帮助
  • 我所有的 objectid 都只是文本字段。
  • select o.*, j.*, ot.* from "Order" o cross joinlateral jsonb_array_elements(o."subOrders")->>'objectId' as j("object_id") join “SubOrder” ot on ot.“objectId” = j.“object_id”;... 抱歉,一个不正确。即使这样也有同样的错误。'
  • 用所涉及的表的结构和要求编辑了我的问题。谢谢。
  • 完成。非常感谢。
【解决方案2】:

我会使用WITH Queries

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 像表格一样加入。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多