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

Postgres připojí nebo nastaví každý prvek pole (pokud neexistuje) na sloupec pole

Předpokládám, že arr_str je typu text[] (ačkoli jste pro ně nepoužili správný formát, takže se mohu mýlit; pokud je to tak, budete muset přenést svou hodnotu do text[] ).

Pokud chcete odstranit duplicity, které jsou již v arr_str, použijte následující příkaz sloupec:

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}'

Nebo použijte následující, pokud chcete zachovat existující duplikace:

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}'

Oba tyto příkazy se nedotknou řádků, které stejně nebudou ovlivněny (podívejte se na where not arr_str @> '{b,c,d}' predikát). Toto je obvykle nejlepší postup a téměř vždy se doporučuje, když se jedná o spouštěče.

http://rextester.com/GKS7382



  1. Jak zajistíte, aby vaše databáze mluvila mnoha jazyky?

  2. PHP:Použití proměnné k uložení názvu tabulky a použití této proměnné v dotazech

  3. PHP PDO ignoruje volbu ATTR_TIMEOUT pro MySQL, když server není dostupný

  4. Co je SQL? Co je databáze? Systémy správy relačních databází (RDBMS) Vysvětleno v jednoduché angličtině.