일치하는 키를 기반으로 jsonb 결과를 얻으려고합니다. 번호와 데이터 열이있는 DB 테이블 "목록"이 있습니다.postgres + jsonb + 다차원 배열에서 키 값 가져 오기
number | data
1 | {"name": "XYZ company", "city": "toronto", "province": "ON", "people" : [
{ "firstName": "tom", "lastName": "hanks",
"phonenumber": [{"type": "mobile", "Number": "111111"}],
"Email": [{"type": "business", "address": "[email protected]"},{"type": "personal", "address": "[email protected]"}] },
{ "firstName": "sandra", "lastName": "petes",
"phonenumber": [{"type": "mobile", "Number": "333"}, {"type": "home", "Number": "444"}],
"Email": [{"type": "business", "address": "[email protected]"}]
}
]}
나는 키를 사용하여 데이터 열에 대한 모든 값을 끌어 필요 -
- 명 -> FIRSTNAME
- 명 ->이 lastName
- 명 -> phonenumber-> 수
- 명을 -> 이메일 -> 주소
지금까지 내가 달성 한 것은 :
SELECT number
,jonb_array_length(jsonb_extract_path(data,'people')) as people_count
,jsonb_extract_path(data,'people','0','firstname') as FirstName
,jsonb_extract_path(data,'people','0','lastname') as LastName
,jsonb_extract_path(data,'people','0','email','Address'") as personEmail
,jsonb_extract_path(data,'people','0','phonenumber','Number') as personPhone
FROM listings
WHERE number='1';
그러나 이것은 사람의 0 번째 요소 만 제공합니다. 모든 요소를 찾아야합니다. 단일 쿼리에서이를 달성 할 수있는 방법이 있습니까?
시간 내 주셔서 감사합니다.
phonenumber와 email의 0 번째 요소에 대해 jsonb_extract_path_text를 추가했습니다. jsonb_extract_path_text (사람 -> '전자 메일'-> 0 - >> '주소') 및 사람들 -> '전자 메일'-> 0 - >> jsonb_extract_path_text ('주소')를 시도했습니다. 아무것도 작동하지 않는 것 같습니다. 가능한 모든 아이디어가 있습니까? – phpfreak
''jsonb_extract_path()''jsonb_extract_path()'함수는''jsonb_extract_path (data, '{people, 0, Email, 0, address}') 형식을 갖기 위해' 'to [email protected] "을 입력하십시오. "사람"배열이 이미 압축 해제 된 위의 해결책에서 모든 사람들의 첫 번째 전자 메일 주소를 얻으려면'jsonb_extract_path (people, '{Email, 0, address}')'를 사용하십시오. – Patrick
오, 정말 고마워! – phpfreak