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

Bagaimana sisi FROM dari UPDATE berhubungan dengan tabel yang ditargetkan untuk UPDATE?

UPDATE kueri yang Anda tampilkan sama persis dengan:

UPDATE fromemailaddress f
SET    call = true 
FROM  (
   SELECT fromemailaddress
   FROM   email 
   WHERE  subject ILIKE '%tester%'
   ) e
WHERE  e.fromemailaddress = f.fromemailaddress;

subject ILIKE '%tester%' adalah padanan yang lebih cepat untuk subject ~ 'tester' . Detail untuk LIKE , ILIKE dan pencocokan ekspresi reguler (~ ) dalam manual atau dalam jawaban terkait ini di dba.SE:

Dan secara efektif sama dengan:

UPDATE fromemailaddress f
SET    call = true
WHERE  EXISTS (
   SELECT 1
   FROM   email e
   WHERE  e.fromemailaddress = f.fromemailaddress
   AND    e.subject ILIKE '%tester%'
   );

Gunakan ini sebagai gantinya.

Jika harus ada beberapa baris dalam tabel email dengan fromemailaddress yang sama mencocokkan baris di fromemailaddress , maka formulir ini hanya mengeksekusi satu perbarui per baris, tidak seperti aslinya yang malang.

Jangan bingung dengan fakta bahwa fromemailaddress digunakan sebagai kolom dan sebagai nama tabel di sini.

Baca manual dengan seksama di sini dan di sini . Khususnya bagian ini:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pembaruan singa menghapus pengguna 'postgres'. Bagaimana cara mengembalikannya?

  2. Postgresql - cara mendapatkan entri dalam tabel yang tidak memiliki kecocokan di tabel lain

  3. Tabel dalam memori di PostgreSQL

  4. Praktik Terbaik Replikasi PostgreSQL - Bagian 2

  5. Fungsi Postgres membuat tetapi tidak mengeksekusi