Вернуть конкретное значение из json, если оно существует, и ноль строк, если нет - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть эта вложенная json-структура в столбце с именем schema:

{"fields" : {"Kommune2015" : {"0101" : "Halden", "0104" : "Moss" }}}

Я могу получить значение, используя:

select schema::jsonb#>>'{fields,Kommune2015,0101}' from meta;
 ?column?
---------
Halden
(1 row)

Но если я запрашиваю ключ, который не существует, я все равно получаю

select schema::jsonb#>>'{fields,Kommune2015,010}' from meta;
 ?column?

----------
(1 row)

Добавление оператора where возвращает значение, если ключ существует:

select schema::jsonb#>>'{fields,Kommune2015,0101}' from meta where schema::jsonb#>>'{fields,Kommune2015,0101}' is not null;

Можно ли сократить этот запрос, чтобы не нужно было явно называть ключ дважды?

Это версия 10.5.

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете использовать подзапрос или CTE . Например

with things as (
    select schema::jsonb#>>'{fields,Kommune2015,0101}' thing from meta
)
select thing from things where thing is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...