Как выбрать *, где ключи JSON содержат ANY / IN (массив значений) - PullRequest
0 голосов
/ 19 июня 2019

Я имею дело с «рабочим процессом» Symfony, «Маркер» и Postgres. (и доктрина)

в БД, столбец "status" содержит данные JSON, подобные этому

{"needs_address":1,"needs_contacts":1,"needs_education":1,"needs_health_and_social":1,"has_profile_photo":1,"has_letter":1}

Я понял, как сделать запрос, как это

SELECT id, profile_status, beneficiary_code
FROM public.beneficiary_profile
WHERE profile_status->>'needs_address' = '1'

Как я могу запросить список статуса 'как
('needs_education','needs_contacts','needs_address')
не выписывая все это как

WHERE profile_status->>'needs_address' = '1'
    OR profile_status->>'needs_contacts' = '1'
    OR profile_status->>'needs_education' = '1'

Я полагаю, что должен быть способ с функциями JSON и, возможно, IN() или ANY()

1 Ответ

0 голосов
/ 19 июня 2019

Вам нужно будет раскрутить элементы, чтобы можно было использовать предложение IN, что-то вроде:

select *
from public.beneficiary_profile p
where exists (select *
              from jsonb_each_text(p.status) as x(ky,val)
              where x.ky in ('needs_address', 'needs_contact', 'needs_education')
                and x.val = '1');
...