Since 8.4, there are useful builtins in Postgres qui rendent the function from the first answer plus facile et peut-être plus rapide (c'est ce que EXPLAIN me dit, de toute façon: "(coût = 0.00..0.07 lignes = 1 largeur = 64)" pour cette requête vs "(coût = 0.00..60.02 lignes = 1 largeur = 64)" pour l'original) .
Le code simplifié est:
SELECT ARRAY
(
SELECT UNNEST(a1)
INTERSECT
SELECT UNNEST(a2)
)
FROM (
SELECT array['two', 'four', 'six'] AS a1
, array['four', 'six', 'eight'] AS a2
) q;
et oui, vous pouvez le transformer en fonction:
CREATE FUNCTION array_intersect(anyarray, anyarray)
RETURNS anyarray
language sql
as $FUNCTION$
SELECT ARRAY(
SELECT UNNEST($1)
INTERSECT
SELECT UNNEST($2)
);
$FUNCTION$;
que vous pouvez appeler comme
SELECT array_intersect(array['two', 'four', 'six']
, array['four', 'six', 'eight']);
Mais vous pouvez juste ainsi appeler en ligne aussi:
SELECT array(select unnest(array['two', 'four', 'six']) intersect
select unnest(array['four', 'six', 'eight']));
Testé, ne fonctionne pas en stock, vous avez besoin d'une extension installée pour le faire fonctionner. mais +1 de toute façon. –
http://www.postgresql.org/docs/current/static/contrib.html # besoin de lire les données ici –
Bonne capture, Kent – dwc