[SQL] 포스트 그레스 - 기능이 개 배열의 교회법을 반환?
SQL포스트 그레스 - 기능이 개 배열의 교회법을 반환?
PostgreSQL을, 당신은 두 배열은 일반 회원이있는 경우 반환 t (참), 즉 사람들을 중복으로 && 연산자를 사용할 수 있습니다. 그 공통 회원이 무엇 반환하는 함수 / 연산자가 있습니까?
이 같은 즉, 뭔가
select arrray_intersection(ARRAY[1, 4, 2], ARRAY[2, 3]);
ARRAY[2]
해결법
-
==============================
1.8.4 이후, (EXPLAIN 무엇의 어쨌든, 나에게 말한다 것을 쉽고 가능한 빨리 첫 번째 대답에서 기능을 포스트 그레스에 유용한 내장 매크로가있다 : "(비용 = 0.00..0.07 행 = 폭 = 64 1)"이 쿼리 대에 대한 . 「비용 (= 0.00..60.02 행 폭 = 1 = 64) "원래의 경우).
8.4 이후, (EXPLAIN 무엇의 어쨌든, 나에게 말한다 것을 쉽고 가능한 빨리 첫 번째 대답에서 기능을 포스트 그레스에 유용한 내장 매크로가있다 : "(비용 = 0.00..0.07 행 = 폭 = 64 1)"이 쿼리 대에 대한 . 「비용 (= 0.00..60.02 행 폭 = 1 = 64) "원래의 경우).
단순화 된 코드는 다음과 같습니다
SELECT ARRAY ( SELECT UNNEST(a1) INTERSECT SELECT UNNEST(a2) ) FROM ( SELECT array['two', 'four', 'six'] AS a1 , array['four', 'six', 'eight'] AS a2 ) q;
그리고 그래, 당신은 기능으로 바꿀 수 있습니다 :
CREATE FUNCTION array_intersect(anyarray, anyarray) RETURNS anyarray language sql as $FUNCTION$ SELECT ARRAY( SELECT UNNEST($1) INTERSECT SELECT UNNEST($2) ); $FUNCTION$;
이는 당신이로 호출 할 수 있습니다
SELECT array_intersect(array['two', 'four', 'six'] , array['four', 'six', 'eight']);
하지만 당신은 단지뿐만 아니라 너무 인라인 호출 할 수 있습니다 :
SELECT array(select unnest(array['two', 'four', 'six']) intersect select unnest(array['four', 'six', 'eight']));
-
==============================
2.& 대신 시도 &&
& 대신 시도 &&
이상 PostgreSQL의 문서를 참조하십시오.
-
==============================
3.하나의 다른 방법 ..
하나의 다른 방법 ..
SELECT ARRAY( SELECT * FROM UNNEST( $1 ) WHERE UNNEST = ANY( $2 ) );
-
==============================
4.당신이 확장 기능을 설치 마음을하지 않는 경우, intarray 확장 & 연산자가 @dwc 지적 아웃으로이 일을 제공합니다 :
당신이 확장 기능을 설치 마음을하지 않는 경우, intarray 확장 & 연산자가 @dwc 지적 아웃으로이 일을 제공합니다 :
SELECT ARRAY[1, 4, 2] & ARRAY[2, 3];
반환 {2}.
-
==============================
5.이 기능을 사용할 수 있습니다 :
이 기능을 사용할 수 있습니다 :
CREATE OR REPLACE FUNCTION intersection(anyarray, anyarray) RETURNS anyarray as $$ SELECT ARRAY( SELECT $1[i] FROM generate_series( array_lower($1, 1), array_upper($1, 1) ) i WHERE ARRAY[$1[i]] && $2 ); $$ language sql;
이 배열의 모든 종류의 작업을해야합니다, 당신은 다음과 같이 사용할 수 있습니다 :
SELECT intersection('{4,2,6}'::INT4[], '{2,3,4}'::INT4[]);
-
==============================
6.
SELECT ARRAY ( SELECT a1[s] FROM generate_series(array_lower(a1, 1), array_upper(a1, 1)) s INTERSECT SELECT a2[s] FROM generate_series(array_lower(a2, 1), array_upper(a2, 1)) s ) FROM ( SELECT array['two', 'four', 'six'] AS a1, array['four', 'six', 'eight'] AS a2 ) q
너무 정수가 아닌 배열에서 작동합니다.
from https://stackoverflow.com/questions/756871/postgres-function-to-return-the-intersection-of-2-arrays by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 : 같은 행의 다른 컬럼에서 선택 최대 값 (0) | 2020.06.29 |
---|---|
[SQL] PHP에서 히어 닥 내에서 변수를 사용 (SQL 연습) (0) | 2020.06.29 |
[SQL] 데이터베이스 테이블에서 계산 된 열 목록을 가져 오기 (SQL 서버) (0) | 2020.06.29 |
[SQL] 테이블의 필드 이름을 반환하는 SQL 명령은 무엇입니까? (0) | 2020.06.29 |
[SQL] 여러 열 조인 (0) | 2020.06.29 |