Od 8.4 jsou v Postgresu užitečné vestavěné moduly, které usnadňují a možná zrychlují funkci z první odpovědi (to mi každopádně říká EXPLAIN:"(cena=0,00..0,07 řádků=1 šířka=64)" pro tento dotaz vs. . "(cena=0,00..60,02 řádků=1 šířka=64)" pro původní.
Zjednodušený kód je:
SELECT ARRAY
(
SELECT UNNEST(a1)
INTERSECT
SELECT UNNEST(a2)
)
FROM (
SELECT array['two', 'four', 'six'] AS a1
, array['four', 'six', 'eight'] AS a2
) q;
a ano, můžete to změnit na funkci:
CREATE FUNCTION array_intersect(anyarray, anyarray)
RETURNS anyarray
language sql
as $FUNCTION$
SELECT ARRAY(
SELECT UNNEST($1)
INTERSECT
SELECT UNNEST($2)
);
$FUNCTION$;
které můžete zavolat jako
SELECT array_intersect(array['two', 'four', 'six']
, array['four', 'six', 'eight']);
Ale můžete to stejně dobře nazvat inline:
SELECT array(select unnest(array['two', 'four', 'six']) intersect
select unnest(array['four', 'six', 'eight']));