PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak usunąć elementy tablicy w PostgreSQL?

Użyj unnest() z array_agg() , np.:

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)

Jeśli często potrzebujesz tej funkcji, zdefiniuj prostą funkcję:

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)
$$;

Możesz użyć tej funkcji dla dowolnej tablicy, nie tylko 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. Importujesz schemat xml do postgres, aby automatycznie utworzyć tabelę, a następnie wypełnić ją plikiem xml?

  2. Postgres SELECT ... FOR UPDATE w funkcjach

  3. Wyzwalacz PostgreSQL do dynamicznego generowania kodów dla wielu tabel

  4. Nie można skopiować tabeli do innej bazy danych za pomocą pg_dump

  5. Jak wyszukiwać w polu json zawierającym tablicę obiektów za pomocą Eloquent