[SQL] 값이 포스트 그레스 배열에 존재하는지 확인
SQL값이 포스트 그레스 배열에 존재하는지 확인
값이 지정된 배열에 존재하는지 포스트 그레스 9.0 사용하여, 나는이 시험 방법이 필요합니다. 지금까지 나는 이런 식으로 뭔가를 내놓았다 :
select '{1,2,3}'::int[] @> (ARRAY[]::int[] || value_variable::int)
하지만 난 그냥 볼 수없는, 생각이에 대한 간단한 방법이 있어야 유지한다. 이것은 더 나은 것 같다 :
select '{1,2,3}'::int[] @> ARRAY[value_variable::int]
나는 그것이 충분하다 생각합니다. 당신이 그것을 할 수있는 다른 방법이있는 경우 그러나, 공유하시기 바랍니다!
해결법
-
==============================
1.임의 구조와 간단한 :
임의 구조와 간단한 :
SELECT value_variable = ANY ('{1,2,3}'::int[])
(괄호) ANY의 오른쪽 피연산자 중 하나 (예를 들면, 서브 쿼리의 결과) 집합 또는 배열 될 수있다. 그것을 사용하는 방법은 여러 가지가 있습니다 :
중요한 차이점 : 배열 연산자 (<@ @> && 외.) 임의 구조는 왼쪽 피연산자 요소 타입을 예상하고 지원하지 않지만 PostgreSQL의 표준 분포 피연산자지지 진 또는 GIST 인덱스 들로서 배열 형 예상 이 지수. 예:
이 중 어느 것도 NULL 요소 작동하지 않습니다. NULL을 테스트하려면 :
-
==============================
2.특정 값이 배열에없는 경우에 의하면, 당신이 안 : 나는에있어 함정을 조심 :
특정 값이 배열에없는 경우에 의하면, 당신이 안 : 나는에있어 함정을 조심 :
SELECT value_variable != ANY('{1,2,3}'::int[])
하지만 사용
SELECT value_variable != ALL('{1,2,3}'::int[])
대신.
-
==============================
3.두 배열을 비교할 수 있습니다. 올바른 배열의 값 중복 왼쪽 배열에있는 값의 경우는 true를 돌려줍니다. 그것은 일종의 hackish의,하지만 그것을 작동합니다.
두 배열을 비교할 수 있습니다. 올바른 배열의 값 중복 왼쪽 배열에있는 값의 경우는 true를 돌려줍니다. 그것은 일종의 hackish의,하지만 그것을 작동합니다.
SELECT '{1}' && '{1,2,3}'::int[]; -- true SELECT '{1,4}' && '{1,2,3}'::int[]; -- true SELECT '{4}' && '{1,2,3}'::int[]; -- false
-
==============================
4.unnest도 사용할 수 있습니다. 이 일련의 행으로 배열을 확장하고 단순히 값을 확인하여 존재 여부 IN 또는 NOT IN을 사용하여 단순하게된다.
unnest도 사용할 수 있습니다. 이 일련의 행으로 배열을 확장하고 단순히 값을 확인하여 존재 여부 IN 또는 NOT IN을 사용하여 단순하게된다.
EG
ID가 NOT IN (표 2에서) unnest (exception_list_ids를 선택) 여기서 테이블에서 선택 *
-
==============================
5.어레이 내의 요소의 존재를보고하면, 적절한 캐스팅 POSTGRES의 SQL 파서를 통과 할 필요가있다. 여기서 배열을 이용한 일례 쿼리 절 조인 연산자를 포함하다 :
어레이 내의 요소의 존재를보고하면, 적절한 캐스팅 POSTGRES의 SQL 파서를 통과 할 필요가있다. 여기서 배열을 이용한 일례 쿼리 절 조인 연산자를 포함하다 :
단순화를 위해 나는 단지 관련 부분을 목록 :
table1 other_name text[]; -- is an array of text
표시된 SQL의 결합 부분
from table1 t1 join table2 t2 on t1.other_name::text[] @> ARRAY[t2.panel::text]
다음은 또한 작동
on t2.panel = ANY(t1.other_name)
난 그냥 구문 분석 컬럼의 정확한 유형을 파악하기 위해 테이블 정의를 패치 할 필요가 없기 때문에 여분의 캐스팅이 필요하다는 것을 추측하고있다. 다른 사람들은 이것에 코멘트를하시기 바랍니다.
from https://stackoverflow.com/questions/11231544/check-if-value-exists-in-postgres-array by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 엔티티 프레임 워크. 테이블의 모든 행을 삭제 (0) | 2020.05.16 |
---|---|
[SQL] 저장 프로 시저가 CSV 파일에 수출 데이터를 하나 개의 파일 만 수출 (0) | 2020.05.16 |
[SQL] MySQL로 변환 SQL Server 쿼리 [중복] (0) | 2020.05.16 |
[SQL] MySQL의에서 마지막 레코드를 얻기 (0) | 2020.05.16 |
[SQL] 포스트 그레스를 사용하여 여러 스키마에서 모든 레코드를 선택합니다 (검색) (0) | 2020.05.15 |