问题描述
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克