PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

In che modo il lato DA di un AGGIORNAMENTO è correlato alla tabella destinata a AGGIORNAMENTO?

Il UPDATE la query che visualizzi è esattamente la stessa di:

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

subject ILIKE '%tester%' è un equivalente più veloce per subject ~ 'tester' . Dettagli per LIKE , LIKE e corrispondenza di espressioni regolari (~ ) nel manuale o in questa risposta correlata su dba.SE:

E in modo efficace lo stesso di:

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

Usa questo invece.

Se devono essere presenti più righe nella tabella email con lo stesso fromemailaddress corrispondenza di una riga in fromemailaddress , questo modulo ne esegue solo uno aggiornamento per riga, a differenza del tuo sfortunato originale.

Non lasciarti confondere dal fatto che fromemailaddress viene utilizzato come colonna e come nome della tabella qui.

Leggi attentamente il manuale qui e qui . In particolare questo bit: