sql >> Databáze >  >> RDS >> PostgreSQL

Postgres - Funkce pro návrat průsečíku 2 POLE?

Od 8.4 jsou v Postgresu užitečné vestavěné moduly, které usnadňují a možná zrychlují funkci z první odpovědi (to mi každopádně říká EXPLAIN:"(cena=0,00..0,07 řádků=1 šířka=64)" pro tento dotaz vs. . "(cena=0,00..60,02 řádků=1 šířka=64)" pro původní.

Zjednodušený kód je:

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

a ano, můžete to změnit na funkci:

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

které můžete zavolat jako

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

Ale můžete to stejně dobře nazvat inline:

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


  1. Jak chránit databázi MySQL a MariaDB před kybernetickými útoky ve veřejné síti

  2. Jak nastavit, aby operátor SQLite LIKE rozlišoval malá a velká písmena

  3. Připojení k databázi Oracle 12c z Pentaho Data Integration (Kettle) Community Edition

  4. Vytvořte tabulku pouze v případě, že v MariaDB neexistuje