8.4以降、Postgresには便利な組み込み関数があり、最初の回答からの関数をより簡単に、おそらくより速くすることができます(とにかく、EXPLAINは、このクエリに対して「(cost =0.00..0.07 rows =1 width =64)」と言っています。 。"(cost =0.00..60.02 rows =1 width =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']));