Как запросить столбец JSON для уникальных значений объекта в PostgreSQL - PullRequest
0 голосов
/ 10 января 2019

Я ищу запрос таблицы для отдельного списка значений в данном столбце 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"}
                                      ]

Я ищу уникальный список всех упомянутых имен полей.

Идеальным ответом был бы запрос, дающий мне список, содержащий «Название продукта», «Цена продукта», «Название продукта», «Вкус продукта», «Название группы» и «Действительный член».

Возможно ли что-то подобное в Postgres?

1 Ответ

0 голосов
/ 10 января 2019

Используйте 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)

Db <> скрипку.

Важно. Обратите внимание, что структура json нелогична и, следовательно, неоправданно велика и сложна. Вместо

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

использование

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

Откройте это db <> fiddle , чтобы увидеть, что правильная структура json подразумевает более простые и быстрые запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...