簡體   English   中英

Select 從 JSON 陣列 postgresql Z0ECD11C1D7A287401D148A23BBD7A2 列

[英]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 中做到這一點?

一個選項使用existsjson(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM