如何在JSON列中查询PostgreSQL中唯一的对象值

时间:2019-01-10 20:10:30

标签: sql json postgresql

我正在寻找一个给定JSON列中值的不同列表的查询表。

在下面的代码片段中,Survey_Results表具有3列: 名称,电子邮件和有效载荷。有效负载是我要查询的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"}
                                      ]

我正在寻找提及的所有fieldName的唯一列表。

理想的答案是查询,并给我一个包含“产品名称”,“产品价格”,“食品名称”,“食品口味”,“乐队名称”和“有效成员”的列表。

在Postgres中是否可能出现这种情况?

1 个答案:

答案 0 :(得分:0)

在后来的联接中使用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)