![](/img/trans.png)
[英]Select Unique value from a JSON Array - PostgreSQL JSON column
[英]Select from JSON Array postgresql JSON column
我將以下 JSON 存儲在 PostgreSQL JSON 列中
{
"status": "Success",
"message": "",
"data": {
"serverIp": "XXXX",
"ruleId": 32321,
"results": [
{
"versionId": 555555,
"PriceID": "8abf35ec-3e0e-466b-a4e5-2af568e90eec",
"price": 550,
"Convert": 0.8922953080331764,
"Cost": 10
}
]
}
}
我想通過 PriceID 在整個 JSON 列(名稱信息)和 select 整個結果元素中搜索特定的 priceID。 我如何在 postgresql JSON 中做到這一點?
一個選項使用exists
和json(b)_array_elements()
。 假設您的表稱為mytable
並且 jsonb 列是mycol
,這看起來像:
select t.*
from mytable t
where exists (
select 1
from jsonb_array_elements(t.mycol -> 'data' -> 'results') x(elt)
where x.elt ->> 'PriceID' = '8abf35ec-3e0e-466b-a4e5-2af568e90eec'
)
在子查詢中, jsonb_array_elements()
取消嵌套位於給定路徑的 json 數組。 然后, where
子句確保數組中至少有一個元素具有給定的PriceID
。
如果您的數據是json
數據類型而不是jsonb
,則需要使用json_array_elements()
而不是jsonb_array_elements()
。
如果要顯示來自匹配數組元素的一些信息,那就不同了。 您可以使用lateral join
而不是exists
。 但請記住,如果多個數組元素匹配,這將復制行:
select t.*, x.elt ->> 'price' price
from mytable t
cross join lateral jsonb_array_elements(t.mycol -> 'data' -> 'results') x(elt)
where x.elt ->> 'PriceID' = '8abf35ec-3e0e-466b-a4e5-2af568e90eec'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.