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

Jak odstranit prvky pole v PostgreSQL?

Použijte unnest() pomocí array_agg() , např.:

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)

Pokud tuto funkci často potřebujete, definujte jednoduchou funkci:

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

Funkci můžete použít pro jakékoli pole, nejen pro int[] :

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

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


  1. PLSQL - Iinsert ve spouštěči způsobující rekurzivní smyčku

  2. java.lang.IllegalStateException:Nelze přečíst řádek 0, sloupec -1 z CursorWindow – problém Android sqlite

  3. Podmíněné pořadí podle doložky

  4. používání relací v databázových operacích