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: