sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres - Funktion för att returnera skärningspunkten mellan 2 ARRAY?

Sedan 8.4 finns det användbara inbyggda funktioner i Postgres som gör funktionen från det första svaret enklare och möjligen snabbare (det är vad EXPLAIN säger mig i alla fall:"(kostnad=0.00..0.07 rader=1 bredd=64)" för denna fråga vs. . "(kostnad=0.00..60.02 rader=1 bredd=64)" för den ursprungliga).

Den förenklade koden är:

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

och ja, du kan göra det till en funktion:

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

som du kan ringa som

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

Men du kan lika gärna kalla det inline också:

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


  1. MySql Count kan inte visa 0-värden

  2. Hur man importerar och exporterar en MySQL-databas

  3. Sömnfunktion i ORACLE

  4. Skillnaden mellan ett JDBC-uttalande och ett förberett uttalande