Tôi sẽ giả định rằng arr_str
thuộc loại text[]
(mặc dù bạn không sử dụng định dạng thích hợp cho chúng, vì vậy tôi có thể sai; nếu đúng như vậy, bạn sẽ cần chuyển giá trị của mình thành text[]
).
Sử dụng câu lệnh sau, nếu bạn muốn loại bỏ các bản sao đã có trong arr_str
cột:
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}'
Hoặc, sử dụng cách sau khi bạn muốn giữ lại các bản sao hiện có:
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}'
Cả hai câu lệnh này sẽ không chạm vào hàng và sẽ không bị ảnh hưởng (hãy xem where not arr_str @> '{b,c,d}'
Thuộc tính). Đây thường là phương pháp hay nhất và hầu như luôn được khuyến khích khi có sự tham gia của các trình kích hoạt.