是否可以比较jsonb中的不同字段

Is it possible to compare different fields in jsonb

Table 列类型 jsonb.

这里json

"weight": {
    "qty": 1112,
    "unit": {
      "name": "gram"
    }
  },
  "options": [
    {
      "name": "genus_species",
      "value": {
        "name": "cucumber"
      }
    },
    {
      "name": "weight",
      "value": {
        "name": "600g"
      }
    },
    {
      "name": "method",
      "value": {
        "name": "salt"
        }
      }
    },
    {
      "name": "tm",
      "value": {
        "name": "chudova-marka"
      }
    }
  ]

在此示例中,“weight.qty”的值“1112”不等于“value.name.600g”。所以这条记录 将是 return.

P.S。我将“qty”转换为字符串并添加后缀“g”以作为字符串进行比较。

所以这里查询没有比较

SELECT 
concat(product.data->'weight'->>'qty', 'g') AS weight,
product.data #>>'{options,0,value,name}' as n1,
product.data #>>'{options,1,value,name}' as n2,
product.data #>>'{options,2,value,name}' as n3,
product.data #>>'{options,3,value,name}' as n4
FROM product

我需要显示“weight.qty”不等于任何“选项的记录。value.name ”。 可能吗?

您需要取消嵌套数组元素:

select p.*
from product p
where not exists (select * 
                  from jsonb_array_elements(p.data -> 'options') as x(option)
                  where x.option ->> 'name' = 'weight' 
                    and x.option -> 'value' ->> 'name' = concat(p.data->'weight'->>'qty', 'g'))