[英]PostgreSQL how to query jsonb by a value?
SELECT * FROM some_table;
我可以查詢得到以下結果:
{
"sku0": {
"Id": "18418",
"Desc": "yes"
},
"sku1": {
"Id": "17636",
"Desc": "no"
},
"sku2": {
"Id": "206714",
"Desc": "yes"
},
"brand": "abc",
"displayName": "something"
}
首先,skus的數量不是固定的。 它可能是 sku0, sku1, sku2, sku3, sku4 ...但它們都以sku
開頭。
然后,我想用17636查詢 Id 並確定其Desc 的值是是還是否。 看了PostgreSQL JSON Functions and Operators 文檔后,郁悶我沒有找到好的方法。
我可以將結果轉換成Python字典,然后使用python的方法可以輕松實現我的要求。
如果用postgresql語句也能達到要求,比Python字典更推薦哪種方法?
我不確定我是否完全理解你想要的結果。 但是如果要過濾 Id,則需要取消嵌套 JSON 列中的所有元素:
select d.v ->> 'Desc' as description
from the_table t
cross join jsonb_each(t.data) as d(k,v)
where d.v ->> 'Id' = '17636'
您可以使用 PostgreSQL v12 的新 jsonpath 表示法:
SELECT data @@ '$.* ? (@.Id == "17636").Desc == "yes"'
FROM some_table;
這將從data
的根 ( $
) 開始,查找其中的任何屬性 ( *
),僅過濾包含值為"17636"
的Id
那些屬性,獲取其Desc
屬性並僅在該屬性為"yes"
返回TRUE
.
不錯,不是嗎?
這可能會給你你需要的東西。
select value->>'Desc' from jsonb_each('{
"sku0": {
"Id": "18418",
"Desc": "yes"
},
"sku1": {
"Id": "17636",
"Desc": "no"
},
"sku2": {
"Id": "206714",
"Desc": "yes"
},
"brand": "abc",
"displayName": "something"
}'::jsonb)
where key like 'sku%'
and value->>'Id'='17636'
此致,
比亞尼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.