从Postgresql表中检索嵌套的json信息-没有当前索引

问题描述

我想从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"'

Demo