我正在查询表以查找给定JSON列中的值的不同列表。
在下面的代码段中,Survey_Results表具有3列:“名称”,“电子邮件”和“有效载荷”。有效负载是我要查询的JSON对象。
Table Name: Survey_Results
Name Email Payload
Ying [email protected] [
{"fieldName":"Product Name", "Value":"Calculator"},
{"fieldName":"Product Price", "Value":"$54.99"}
]
Kendrick [email protected] [
{"fieldName":"Food Name", "Value":"Texas Toast"},
{"fieldName":"Food Taste", "Value":"Delicious"}
]
Andy [email protected] [
{"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结构意味着更简单,更快速的查询。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句