PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres - Функция за връщане на пресечната точка на 2 МАССИВА?

От 8.4 има полезни вградени модули в Postgres, които правят функцията от първия отговор по-лесна и вероятно по-бърза (това ми казва EXPLAIN, така или иначе:"(cost=0.00..0.07 rows=1 width=64)" за тази заявка срещу . "(cost=0.00..60.02 rows=1 width=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']);

Но можете също да го наречете inline:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL вътрешности:Какво е „resjunk“?

  2. Как мога да съпоставя последните две думи в изречение в PostgreSQL?

  3. Postgres дъмп само на части от таблици за моментна снимка на разработчиците

  4. Как да картографирате PostgreSQL enum с JPA и Hibernate

  5. django.db.utils.ProgrammingError:връзката вече съществува