PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgres nối hoặc đặt từng phần tử (nếu không tồn tại) của một mảng thành một cột mảng

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.

http://rextester.com/GKS7382



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giám sát phân phối Percona cho PostgreSQL - Các chỉ số chính

  2. Postgres không thể nghe một địa chỉ IP cụ thể

  3. Khóa một hàng cụ thể trong postgres

  4. Psycopg2 chèn từ điển python trong cơ sở dữ liệu postgres

  5. Làm thế nào để ghi khung dữ liệu vào bảng Postgres mà không cần sử dụng công cụ SQLAlchemy?