8.4 के बाद से, पोस्टग्रेज़ में उपयोगी बिल्टिन हैं जो पहले उत्तर से फ़ंक्शन को आसान और संभवतः तेज़ बनाते हैं (यही वह है जो EXPLAIN मुझे बताता है, वैसे भी:"(लागत =0.00..0.07 पंक्तियों =1 चौड़ाई =64)" इस क्वेरी के लिए बनाम . "(लागत=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']));