Postgres 9.6에 다음 형식의 JSON 배열이 포함 된 jsonb 열이 있습니다.
[
{
"courses": { "course-1": { "graduated": false }, "course-5": { "graduated": true } }
},
{
"courses": { "course-6": { "graduated": false } }
}
]
하나 course-1
또는 course-12
단일 쿼리로 등록한 모든 사용자를 찾고 싶습니다 . 즉, 하나가 사용자 course-1
또는 course-12
에 courses
자신의 항목 중 하나에 대한 객체 jsonb
배열입니다.
물론 작동하지 않는 다음과 같은 많은 것을 시도했습니다.
select enrollment_info from users where (enrollment_info @> '["courses" ?| array['course-1', 'course-12']]')
이 문제를 해결하는 방법에 대한 제안이 있습니까? 감사!
를 사용 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
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
| 등록 정보 | | : ------------------------------------------------- -------------------------------------------------- ------------------------------- | | [{ "courses": { "course-1": { "graduated": false}, "course-5": { "graduated": true}}}, { "courses": { "course-6": { "졸업": 거짓}}}] | | [{ "코스": { "코스 -5": { "졸업": true}, "코스 -12": { "졸업": false}}}] |
처음 두 배열은 각각 course-1
및 을 포함하므로 일치합니다 course-12
. 세 번째 배열이 일치하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다