从数组中的任何项目获取数据

问题描述

Posgresql 9.5

字段类型: jsonb

此处json

{
  "options": [
    {
      "name": "method"
    },{
      "name": "flavor"
    },{
      "name": "weight","value": {
        "name": "300g"
      }
    }
  ]
}

在这里查询从数组中获取索引为2的项( weight )的值:

SELECT 
id,product.data #>'{title,en}' AS title_en,product.data #>>'{options,2,value,name }' as options_weight_value
FROM product 

好。很好。

但是 weight 可以存在于数组的任何索引中的问题。第一或第二,依此类推。

因此,我需要在节点“重量”中获取 name 300g )的值。 我需要这样的短信:

  SELECT 
    id,*,name,weight }' as options_weight_value
    FROM product 

有可能吗?

解决方法

我想我找到了解决方法:

SELECT 
id,p.data #>'{title,en}' AS title_en,p.data #>'{weight,qty}' AS weight_qty,(select * 
from jsonb_array_elements(p.data -> 'options') AS options_array
where 
 options_array ->> 'name' = 'weight'
) #>'{value,name}' as options_weight
from product p

现在在任何数组的项目中找到重量(如果存在)的值。在此示例中,它= 300克