【发布时间】:2019-09-12 15:23:28
【问题描述】:
我有一个表my_table,其中包含一些数据的jsonb列,例如,在单行中,该列可以包含以下数据:
[
{
"x_id": "1",
"type": "t1",
"parts": [
{ "part_id": "1", price: 400 },
{ "part_id": "2", price: 500 },
{ "part_id": "3", price: 0 }
]
},
{
"x_id": "2",
"type": "t1",
"parts": [
{ "part_id": "1", price: 1000 },
{ "part_id": "3", price: 60 }
]
},
{
"x_id": "3",
"type": "t2",
"parts": [
{ "part_id": "1", price: 100 },
{ "part_id": "3", price: 780 },
{ "part_id": "2", price: 990 }
]
}
]
在给定x_id 和part_id 的情况下,我需要帮助查找如何从parts 数组中删除元素。
示例
鉴于x_id=2 和part_id=1,我需要将数据更新为:
[
{
"x_id": "1",
"type": "t1",
"parts": [
{ "part_id": "1", price: 400 },
{ "part_id": "2", price: 500 },
{ "part_id": "3", price: 0 }
]
},
{
"x_id": "2",
"type": "t1",
"parts": [
{ "part_id": "3", price: 60 }
]
},
{
"x_id": "3",
"type": "t2",
"parts": [
{ "part_id": "1", price: 100 },
{ "part_id": "3", price: 780 },
{ "part_id": "2", price: 990 }
]
}
]
PS1:这些数据无法标准化,所以这不是一个可能的解决方案。
PS2:我正在运行 PostgreSQL 9.6
PS3:我检查了this question 和this question,但与其他问题相比,我的数据结构似乎过于复杂,因此我无法应用给定的答案。
Edit1:json 数据可能很大,尤其是parts 数组,它的元素可以从少到 0 到几千。
【问题讨论】:
-
最好在 SQL 之外完成。
-
我把它作为最后的手段,以防数据库中只有一个查询就无法做到这一点。
-
你能改变JSON结构吗?数组本质上很难使用。如果您可以将其更改为 this 之类的内容,那会容易得多,因为您可以使用类似引用的路径访问所有内容。
-
很遗憾,这是不可能的
-
每个 json 元素的
x_id是否唯一?
标签: sql json postgresql jsonb postgres-9.6