[SQL] JSON 열의 배열의 요소를 쿼리
SQLJSON 열의 배열의 요소를 쿼리
최근 JSONfunctionalities을 활용 PostgreSQL의 9.3.1을 사용하여 업그레이드. 내 표에서이 같은 구조를 가진 JSON 형식 열이 :
{
"id": "123",
"name": "foo",
"emails":[
{
"id": "123",
"address": "somethinghere"
},
{
"id": "456",
"address": "soemthing"
}
]
}
이 질문의 목적을 위해 단지 더미 데이터입니다.
그것은 ID를 기반으로 이메일 배열에서 특정 항목에 대해 조회 할 수 있습니까? 꽤 많은 : "반환 이메일 어디 ID = 123)"?
해결법
-
==============================
1.네, 가능합니다 :
네, 가능합니다 :
SELECT * FROM tbl t, json_array_elements(t.json_col->'emails') AS elem WHERE elem->>'id' = 123;
TBL json_col는 JSON 컬럼의 이름 인, 테이블 이름 인.
이 관련 대답 자세한 내용 :
더 많은 암시 CROSS에 대한이 관련 대답의 마지막 단락에서 측면 가입 :
지수는 쿼리 이런 종류의 지원 :
-
==============================
2.9.4+ 포스트 그레스에서 JSONB 열 사용하면이 연산자를 포함 사용할 수 있습니다 @> 쿼리에 배열의 요소 :
9.4+ 포스트 그레스에서 JSONB 열 사용하면이 연산자를 포함 사용할 수 있습니다 @> 쿼리에 배열의 요소 :
SELECT * FROM jsontest WHERE data @> '{ "emails": [{ "id": "123" }] }';
자세한 내용은 JSON 형식의 내부 배열 요소에 대한 쿼리를 참조하십시오.
다음은 작업 예입니다 :
CREATE TABLE jsontest(data JSONB NOT NULL); INSERT INTO jsontest VALUES ( '{ "name": "foo", "id": "123", "emails": [ { "address": "somethinghere", "id": "123" }, { "address": "soemthing", "id": "456" } ] }' ); SELECT * FROM jsontest WHERE data @> '{ "emails": [{ "id": "123" }] }'; data ---- {"id": "123", "name": "foo", "emails": [{"id": "123", "address": "somethinghere"}, {"id": "456", "address": "soemthing"}]}
(1 행)
-
==============================
3.이 게시물에 우연히 발견 직접 쿼리 같은 테이블에 수 :
이 게시물에 우연히 발견 직접 쿼리 같은 테이블에 수 :
SELECT * FROM table_name, json_array_elements(json_column) AS data WHERE data->>'id' = 123;
이 부분을 생략 :
json_array_elements(t.json_col->'emails')
-
==============================
4.당신은 간단하게 그것을 할 수 있습니다 :
당신은 간단하게 그것을 할 수 있습니다 :
SELECT * FROM table WHERE emails->>'id' = '123';
당신이 이런 식으로 할 수있는 정수가 있다면 당신은 문자열로 ID를 저장 같다 :
SELECT * from table WHERE cast(emails->>'id' as integer ) = 123 ;
또는 당신은 ID로 모든 행을 얻을 수 있습니다> (10)
SELECT * from table WHERE cast(emails->>'id' as integer ) > 10 ;
from https://stackoverflow.com/questions/19568123/query-for-element-of-array-in-json-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 병합 중복 날짜 간격 (0) | 2020.04.19 |
---|---|
[SQL] SQL은 다 대다 같은 유형의 관계 테이블로 만들려면 (0) | 2020.04.19 |
[SQL] `REPLACE`와 MySQL에서 'INSERT ... ON DUPLICATE KEY UPDATE` 사이의 실제적인 차이점은 무엇입니까? (0) | 2020.04.19 |
[SQL] 어떻게 MySQL의에서 여러 열을 검색하려면? (0) | 2020.04.19 |
[SQL] SQL 서버 교체, 특정 문자 후 모두 제거 (0) | 2020.04.19 |