sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo se relaciona el lado DESDE de una ACTUALIZACIÓN con la tabla de destino de la ACTUALIZACIÓN?

La UPDATE la consulta que muestra es exactamente la misma que:

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

subject ILIKE '%tester%' es un equivalente más rápido para subject ~ 'tester' . Detalles para LIKE , LIKE y coincidencia de expresiones regulares (~ ) en el manual o en esta respuesta relacionada en dba.SE:

Y efectivamente lo mismo que:

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

Usa esto en su lugar.

Si debe haber varias filas en la tabla email con el mismo fromemailaddress hacer coincidir una fila en fromemailaddress , entonces este formulario solo ejecuta uno actualización por fila, a diferencia de su desafortunado original.

No se deje confundir por el hecho de que fromemailaddress se usa como columna y como nombre de tabla aquí.

Lea atentamente el manual aquí y aquí . En particular este bit: