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

Как да премахнете елементи от масив в PostgreSQL?

Използвайте unnest() с array_agg() , напр.:

with cte(array1, array2) as (
    values (array[1,2,3,4], array[1,4])
    )
select array_agg(elem)
from cte, unnest(array1) elem
where elem <> all(array2);

 array_agg 
-----------
 {2,3}
(1 row)

Ако често имате нужда от тази функционалност, дефинирайте простата функция:

create or replace function array_diff(array1 anyarray, array2 anyarray)
returns anyarray language sql immutable as $$
    select coalesce(array_agg(elem), '{}')
    from unnest(array1) elem
    where elem <> all(array2)
$$;

Можете да използвате функцията за всеки масив, не само int[] :

select array_diff(array['a','b','c','d'], array['a','d']);

 array_diff 
------------
 {b,c}
(1 row) 


  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 множество АКТУАЛИЗАЦИИ на различни редове в една и съща таблица имат ли конфликтни ключалки?

  2. Вземете минималната ненулева стойност в множество колони

  3. Инсталиране на PostgreSQL на Docker

  4. PostgreSQL:текущ брой редове за заявка „по минута“

  5. Има ли начин да проникнете в база данни на PostgreSQL, ако сте забравили паролата?