sql >> Database >  >> RDS >> PostgreSQL

Postgres - Functie om het snijpunt van 2 ARRAY's te retourneren?

Sinds 8.4 zijn er nuttige ingebouwde functies in Postgres die de functie van het eerste antwoord eenvoudiger en mogelijk sneller maken (dat is wat EXPLAIN me in ieder geval vertelt:"(cost=0.00..0.07 rows=1 width=64)" for this query vs "(cost=0.00..60.02 rows=1 width=64)" voor de originele).

De vereenvoudigde code is:

SELECT ARRAY
    (
        SELECT UNNEST(a1)
        INTERSECT
        SELECT UNNEST(a2)
    )
FROM  (
        SELECT  array['two', 'four', 'six'] AS a1
              , array['four', 'six', 'eight'] AS a2
      ) q;

en ja, je kunt er een functie van maken:

CREATE FUNCTION array_intersect(anyarray, anyarray)
  RETURNS anyarray
  language sql
as $FUNCTION$
    SELECT ARRAY(
        SELECT UNNEST($1)
        INTERSECT
        SELECT UNNEST($2)
    );
$FUNCTION$;

die je kunt bellen als

SELECT array_intersect(array['two', 'four', 'six']
                     , array['four', 'six', 'eight']);

Maar je kunt het net zo goed inline noemen:

 SELECT array(select unnest(array['two', 'four', 'six']) intersect
              select unnest(array['four', 'six', 'eight']));


  1. Het herstelmodel van een database in SQL Server ophalen met T-SQL

  2. Opvolging van cursoropties

  3. DATE_SUB() Voorbeelden – MySQL

  4. MariaDB JSON_MERGE_PATCH() uitgelegd