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

Perbarui kolom tabel dengan kolom tabel lain di PostgreSQL

UPDATE . Anda kueri akan terlihat seperti ini:

UPDATE table2 t2
SET    val2 = t1.val1
FROM   table1 t1
WHERE  t2.table2_id = t1.table2_id
AND    t2.val2 IS DISTINCT FROM t1.val1;  -- optional, see below

Cara Anda memilikinya, tidak ada tautan antara baris individual dari dua tabel. Setiap baris akan diambil dari table1 untuk setiap baris di table2 . Ini tidak masuk akal (dengan cara yang mahal) dan juga memicu kesalahan sintaks, karena ekspresi subquery di tempat ini hanya diperbolehkan untuk mengembalikan satu nilai.

Saya memperbaikinya dengan menggabungkan dua tabel di table2_id . Ganti itu dengan apa pun yang benar-benar menghubungkan keduanya.

Saya menulis ulang UPDATE untuk bergabung di table1 (dengan FROM klausa) daripada menjalankan subkueri yang berkorelasi, karena biasanya lebih cepat dengan urutan besarnya.
Ini juga mencegah table2.val2 akan dibatalkan jika tidak ada baris yang cocok ditemukan di table1 . Sebaliknya, tidak ada terjadi pada baris seperti itu dengan bentuk kueri ini.

Anda dapat menambahkan ekspresi tabel ke FROM daftar seperti dalam SELECT plain biasa (tabel, subquery, fungsi set-return, ...). Panduan:

from_list

Daftar ekspresi tabel, yang memungkinkan kolom dari tabel lain muncul di WHERE kondisi dan ekspresi pembaruan. Ini mirip dengan daftar tabel yang dapat ditentukan di FROM Klausula SELECT penyataan. Perhatikan bahwa tabel target tidak boleh muncul di from_list , kecuali jika Anda bermaksud bergabung sendiri (dalam hal ini harus muncul dengan alias di from_list ).

WHERE terakhir klausa mencegah pembaruan yang tidak akan mengubah apa pun - yang praktis selalu merupakan ide bagus (hampir biaya penuh tetapi tidak ada keuntungan, pengecualian eksotis berlaku). Jika nilai lama dan baru dijamin NOT NULL , sederhanakan menjadi:

AND   t2.val2 <> t1.val1
  • Bagaimana cara (atau dapatkah saya) PILIH BERBEDA pada beberapa kolom?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menambahkan kunci utama peningkatan otomatis ke tabel yang ada, di PostgreSQL?

  2. Di Redshift/Postgres, bagaimana cara menghitung baris yang memenuhi suatu kondisi?

  3. Tabel sementara PostgreSQL

  4. Mengumumkan repmgr 2.0RC2

  5. Tambahkan Indikator Ordinal ke Tanggal di PostgreSQL