sql >> Database >  >> RDS >> PostgreSQL

Postgres voegt elk element (indien niet aanwezig) van een array toe aan of stelt deze in op een arraykolom

Ik neem aan dat arr_str is van het type text[] (hoewel je niet het juiste formaat ervoor hebt gebruikt, dus ik kan het mis hebben; als dat het geval is, moet je je waarde casten naar text[] ).

Gebruik de volgende instructie als u duplicaten wilt verwijderen die al aanwezig zijn in de arr_str kolom:

update tabl1
set    arr_str = (select array_agg(distinct e) from unnest(arr_str || '{b,c,d}') e)
where  not arr_str @> '{b,c,d}'

Of gebruik de volgende als u bestaande duplicaten wilt behouden:

update tabl1
set    arr_str = arr_str || array(select unnest('{b,c,d}'::text[]) except select unnest(arr_str))
where  not arr_str @> '{b,c,d}'

Beide uitspraken raken de rijen niet, wat sowieso niet wordt beïnvloed (kijk naar de where not arr_str @> '{b,c,d}' predikaat). Dit is meestal de beste methode en wordt bijna altijd aanbevolen als er triggers in het spel zijn.

http://rextester.com/GKS7382



  1. Oracle SQL - REGEXP_LIKE bevat andere tekens dan a-z of A-Z

  2. Hoe maak je een willekeurig getal voor een kolom in mysql met DEFAULT Constraint?

  3. SQL-filtering op meerdere kolommen

  4. Hoe to_date() werkt in PostgreSQL