簡體   English   中英

如何在 PostgreSQL 中查詢 JSON 列的唯一對象值

[英]How to query JSON column for unique object values in PostgreSQL

我正在尋找在給定 JSON 列中查詢不同值列表的表。

在下面的代碼片段中,Survey_Results 表有 3 列:名稱、電子郵件和有效負載。 Payload 是我要查詢的 JSON 對象。

Table Name: Survey_Results

Name         Email                      Payload

Ying         SmartStuff@gmail.com     [
                                      {"fieldName":"Product Name", "Value":"Calculator"},
                                      {"fieldName":"Product Price", "Value":"$54.99"}
                                      ]

Kendrick     MrTexas@gmail.com        [
                                      {"fieldName":"Food Name", "Value":"Texas Toast"},
                                      {"fieldName":"Food Taste", "Value":"Delicious"}
                                      ]

Andy         WhereTheBass@gmail.com   [
                                      {"fieldName":"Band Name", "Value":"MetalHeads"}
                                      {"fieldName":"Valid Member", "Value":"TRUE"}
                                      ]

我正在尋找提到的所有 fieldNames 的唯一列表。

理想的答案是查詢給我一個包含“產品名稱”、“產品價格”、“食物名稱”、“食物味道”、“樂隊名稱”和“有效會員”的列表。

在 Postgres 中可能有這樣的事情嗎?

在橫向連接中使用jsonb_array_elements()

select distinct value->>'fieldName' as field_name
from survey_results
cross join json_array_elements(payload)

  field_name   
---------------
 Product Name
 Valid Member
 Food Taste
 Product Price
 Food Name
 Band Name
(6 rows)    

如何找到不同的食品名稱值?

select distinct value->>'Value' as food_name
from survey_results
cross join json_array_elements(payload)
where value->>'fieldName' = 'Food Name'

  food_name  
-------------
 Texas Toast
(1 row)

數據庫<>小提琴。

重要的。 請注意,json 結構是不合邏輯的,因此不必要地龐大和復雜。 代替

[
    {"fieldName":"Product Name", "Value":"Calculator"},
    {"fieldName":"Product Price", "Value":"$54.99"}
]

{"Product Name": "Calculator", "Product Price": "$54.99"}

打開這個db<>fiddle可以看到正確的 json 結構意味着更簡單和更快的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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