首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从postgres jsonb嵌套数组中获取字段

问如何从postgres jsonb嵌套数组中获取字段
EN

Stack Overflow用户
提问于 2021-01-18 21:12:36
回答 1查看 29关注 0票数 1

我的表中有一个jsonb列。有一个数据

代码语言:javascript
复制
[
   {
      "name":"Гарнир",
      "num_max":1,
      "num_min":1,
      "modifications":[
         {
            "name":"Салат Вінегрет",
            "price":48,
            "brutto":1,
            "ingredient_id":33,
            "dish_modification_id":1
         },
         {
            "name":"Картошка фри",
            "price":24,
            "brutto":150,
            "ingredient_id":28,
            "dish_modification_id":2
         },
         {
            "name":"Говядина",
            "price":54,
            "brutto":150,
            "ingredient_id":19,
            "dish_modification_id":22
         },
         {
            "name":"Соус «Цезарь»",
            "price":27.6,
            "brutto":50,
            "ingredient_id":6,
            "dish_modification_id":23
         }
      ],
      "dish_modification_group_id":1
   },
   {
      "name":"Напитки",
      "num_max":1,
      "num_min":1,
      "modifications":[
         {
            "name":"Десерт Alphonso",
            "price":66,
            "brutto":1,
            "ingredient_id":11,
            "dish_modification_id":9
         }
      ],
      "dish_modification_group_id":4
   }
]

我需要通过product_id (整型表字段)和"dish_modification_id“来获取”价格“字段。该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-18 22:06:57

这是我的建议。当然,您可以添加where和其他子句。

代码语言:javascript
复制
with t(x) as 
(
 select j from jsonb_array_elements('... put your JSON data here ...'::jsonb) j
)
select (e ->> 'price')::numeric, (e ->> 'dish_modification_id')::numeric 
  from t 
 cross join lateral jsonb_array_elements(t.x -> 'modifications') e;

另一个(也许更干净的)版本。首先展平,然后选择。

代码语言:javascript
复制
with t(jsondata) as 
(
 select '... put your JSON data here ...'::jsonb
)
 select (e ->> 'price')::numeric, (e ->> 'dish_modification_id')::numeric 
   from t 
  cross join lateral jsonb_array_elements(jsondata) ext_array
  cross join lateral jsonb_array_elements(ext_array -> 'modifications') e;

运行示例here。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65775200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档