Kể từ 8.4, có những nội trang hữu ích trong Postgres làm cho hàm từ câu trả lời đầu tiên dễ dàng hơn và có thể nhanh hơn (dù sao thì đó là những gì EXPLAIN nói với tôi:"(cost =0.00..0.07 row =1 width =64)" cho truy vấn này vs . "(chi phí =0,00..60,02 hàng =1 chiều rộng =64)" đối với hàng gốc).
Mã đơn giản là:
SELECT ARRAY
(
SELECT UNNEST(a1)
INTERSECT
SELECT UNNEST(a2)
)
FROM (
SELECT array['two', 'four', 'six'] AS a1
, array['four', 'six', 'eight'] AS a2
) q;
và vâng, bạn có thể biến nó thành một hàm:
CREATE FUNCTION array_intersect(anyarray, anyarray)
RETURNS anyarray
language sql
as $FUNCTION$
SELECT ARRAY(
SELECT UNNEST($1)
INTERSECT
SELECT UNNEST($2)
);
$FUNCTION$;
mà bạn có thể gọi là
SELECT array_intersect(array['two', 'four', 'six']
, array['four', 'six', 'eight']);
Nhưng bạn cũng có thể gọi nó là nội tuyến:
SELECT array(select unnest(array['two', 'four', 'six']) intersect
select unnest(array['four', 'six', 'eight']));