是否可以比较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'))
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'))