如何在 postgresql 中加入从 Json_array_elements 返回的值?
Posted
技术标签:
【中文标题】如何在 postgresql 中加入从 Json_array_elements 返回的值?【英文标题】:how to join on the values returned from Json_array_elements in postgresql? 【发布时间】: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.objectId
和suborder.objectid
AS Order.suborders 列是一个jsonb对象数组,我取数组元素如下。
select jsonb_array_elements("subOrders")->>'objectId'
from "Order"
然后就是将返回的objectId与Suborder表连接起来的问题。
【问题讨论】:
@a_horse_with_no_name 感谢您编辑问题。请帮忙。 【参考方案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 像表格一样加入。
【讨论】:
非常感谢 Ashraful。你也可以分享其他方法,比如加入其他表格吗? PostgreSql : Json Array to Rows using Lateral Join 怎么样?以上是关于如何在 postgresql 中加入从 Json_array_elements 返回的值?的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 如何知道从数组或字典中加载啥 JSON
SQLAlchemy PostgreSQL row_to_json关系