PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Hapus satu, nilai non-unik dari array

Berdasarkan jawaban lama saya di dba.SE yang Anda temukan dan manfaatkan dengan baik:

Anda dapat mengambil satu langkah lebih jauh:

CREATE OR REPLACE FUNCTION f_array_remove_elem1(anyarray, anyelement)
  RETURNS anyarray LANGUAGE sql IMMUTABLE AS
'SELECT $1[:idx-1] || $1[idx+1:] FROM array_position($1, $2) idx';

Fungsi ini mengambil nilai elemen yang akan dihapus sebagai parameter ke-2. Menggunakan anyelement tipe-semu polimorfik sesuai untuk membuat ini berfungsi untuk semua jenis array.

Kemudian UPDATE sederhananya adalah:

UPDATE test_table
SET    test_array = f_array_remove_elem1(test_array, 'B')
WHERE  id = 1;

db<>fiddle di sini

Saat menggunakan fungsi asli saya f_array_remove_elem() yang mengambil posisi indeks alih-alih nilai elemen, Anda dapat melakukannya tanpa subkueri:

UPDATE test_table
SET    test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE  id = 1;

Bahkan mungkin sedikit lebih cepat daripada fungsi baru saya.
Dan perhatikan bahwa versi yang lebih sederhana di bagian bawah jawaban lama saya berfungsi untuk Postgres 9.6.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unduh sebagian database dari heroku

  2. Tidak ada permintaan kata sandi untuk pengguna super postgresql

  3. Cara Menghitung Rata-Rata Pergerakan di PostgreSQL

  4. Apa yang Harus Diperhatikan jika Replikasi PostgreSQL Anda Lagging

  5. Konvensi penamaan PostgreSQL