问题描述
我想从Postgresql表(jsonb
)的sub_table
字段(prices
)中检索嵌套的json信息。
我能够使用以下命令检索json:
with jsontable as (
SELECT "sub_table"
FROM "prices"
WHERE "Scenario" = 'A' AND "data_type" = 'new'
)
SELECT * from jsontable
这将返回一个json
表,如下所示:
{
"0": {
"Name": "CompX","Price": 10,"index": 1,"Date": "2020-01-09T00:00:00.000Z"
},"1": {
"Name": "CompY","Price": 20,"2": {
"Name": "CompX","Price": 19,"index": 2,"Date": "2020-01-10T00:00:00.000Z"
}
}
我想返回与Name = "CompX"
相关的所有数据,但无法使查询正常工作。
我尝试遵循examples here,但无法解决。我需要以某种方式重新编制索引吗?
解决方法
您可以使用jsonb_each
函数逐行返回提取的JSONB数据,并按(j.value -> 'Name')::text = '"CompX"'
条件进行过滤:
SELECT j.value
FROM prices p
CROSS JOIN jsonb_each(sub_table) AS j(e)
WHERE (j.value -> 'Name')::text = '"CompX"'