Вы можете использовать jsonb_array_elements
, чтобы развернуть массив, а затем проверить, существует ли хотя бы один из найденных ключей:
select enrollment_info
from users,
jsonb_array_elements(enrollment_info) courses
where
courses->'courses'->'course-1' is not null
or courses->'courses'->'course-12' is not null
Демонстрация на DB Fiddle :
with users as (
select
'[
{ "courses": { "course-1": { "graduated": false }, "course-5": { "graduated": true } }},
{ "courses": { "course-6": { "graduated": false } } }
]'::jsonb enrollment_info
union all select
'[
{ "courses": { "course-12": { "graduated": false }, "course-5": { "graduated": true } }}
]'::jsonb
union all select
'[
{ "courses": { "course-4": { "graduated": false } }}
]'::jsonb
)
select enrollment_info
from users,
jsonb_array_elements(enrollment_info) courses
where
courses->'courses'->'course-1' is not null
or courses->'courses'->'course-12' is not null
| enrollment_info |
| :---------------------------------------------------------------------------------------------------------------------------------- |
| [{"courses": {"course-1": {"graduated": false}, "course-5": {"graduated": true}}}, {"courses": {"course-6": {"graduated": false}}}] |
| [{"courses": {"course-5": {"graduated": true}, "course-12": {"graduated": false}}}] |
Первые два массива совпадают, поскольку они содержат соответственно course-1
и course-12
. Третий массив не совпадает.