Postgres 배열에 값이 있는지 확인
주어진 배열에 값이 있는지 테스트하는 방법이 필요합니다. 지금까지 나는 이와 같은 것을 생각해 냈습니다.
select '{1,2,3}'::int[] @> (ARRAY[]::int[] || value_variable::int)
그러나 나는 이것에 대한 더 간단한 방법이 있어야한다고 생각합니다. 나는 그것을 볼 수 없습니다.
편집 : 방금 내가 이것을 할 수 있다는 것을 깨달았습니다.
select '{1,2,3}'::int[] @> ARRAY[value_variable::int]
이것은 훨씬 낫고 충분하다고 생각하지만 다른 방법이 있다면 공유하십시오.
와 간단한 ANY
구조 :
SELECT value_variable = ANY ('{1,2,3}'::int[])
오른쪽 피연산자 ANY
(괄호는) 중 어느 하나 일 수있다 (예를 들면, 서브 쿼리의 결과) 세트 또는 배열 . 여러 가지 방법으로 사용할 수 있습니다.
중요한 차이 : 배열 연산자 ( <@
, @>
. 등) 예상 배열 피연산자와 같은 유형의 지지 진 또는 GIST 인덱스 그동안, PostgreSQL의 표준 분포를 ANY
구조가 예상 소자 피연산자 좌측 이러한 인덱스를 지원하지 않는 타입. 예:
이 중 어느 것도 NULL
요소에 적용되지 않습니다. 테스트하려면 NULL
:
내가 잡은 함정을 조심하십시오 : 특정 값이 배열에 존재하지 않는지 확인할 때 다음을 수행해서는 안됩니다.
SELECT value_variable != ANY('{1,2,3}'::int[])
하지만 사용
SELECT value_variable != ALL('{1,2,3}'::int[])
대신에.
그러나 다른 방법이 있다면 공유하십시오.
두 배열을 비교할 수 있습니다. 왼쪽 배열의 값 중 하나가 오른쪽 배열의 값과 겹치면 true를 반환합니다. 일종의 해킹이지만 작동합니다.
SELECT '{1}' && '{1,2,3}'::int[]; -- true
SELECT '{1,4}' && '{1,2,3}'::int[]; -- true
SELECT '{4}' && '{1,2,3}'::int[]; -- false
- 첫 번째 쿼리와 두 번째 쿼리에서 value
1
는 올바른 배열에 있습니다. true
값4
이 올바른 배열에 포함되어 있지 않더라도 두 번째 쿼리는입니다 .- 세 번째 쿼리의 경우 왼쪽 배열 (즉,
4
)의 값 이 오른쪽 배열에 없으므로 반환합니다.false
unnest
사용할 수 있습니다. 이 일련의 행으로 배열을 확장하고 단순히 값을 확인하여 존재 여부를 이용하여 간단 같다 IN
나 NOT IN
.
예 :
아이디 => UUID
exception_list_ids => uuid []
select * from table where id NOT IN (select unnest(exception_list_ids) from table2)
배열에 요소가 있는지 찾을 때 postgres의 SQL 파서를 전달하려면 적절한 캐스팅이 필요합니다. 다음은 join 절에서 array contains 연산자를 사용하는 쿼리 예입니다.
간단히하기 위해 관련 부분 만 나열합니다.
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)
구문 분석에서 열의 정확한 유형을 파악하기 위해 테이블 정의를 가져올 필요가 없기 때문에 추가 캐스팅이 필요하다고 생각합니다. 다른 사람들은 이것에 의견을주십시오.
참고 URL : https://stackoverflow.com/questions/11231544/check-if-value-exists-in-postgres-array
'Programing' 카테고리의 다른 글
로컬 파일을 Java의 URL로 전달 (0) | 2020.06.02 |
---|---|
URL에서 bash 스크립트 실행 (0) | 2020.06.02 |
슬라이스 방법이 들어 있습니다 (0) | 2020.06.02 |
양방향 JPA OneToMany / ManyToOne 연결에서“연결의 반대면”이란 무엇입니까? (0) | 2020.06.02 |
Razor View Engine : 표현식 트리에 동적 작업이 포함되어 있지 않을 수 있습니다 (0) | 2020.06.02 |