UPDATE forespørgslen, du viser, er nøjagtig den samme som:
UPDATE fromemailaddress f
SET call = true
FROM (
SELECT fromemailaddress
FROM email
WHERE subject ILIKE '%tester%'
) e
WHERE e.fromemailaddress = f.fromemailaddress;
subject ILIKE '%tester%' er en hurtigere ækvivalent for subject ~ 'tester' . Detaljer for LIKE , ILIKE og matchning af regulære udtryk (~ ) i manualen
eller i dette relaterede svar på dba.SE:
Og effektivt det samme som:
UPDATE fromemailaddress f
SET call = true
WHERE EXISTS (
SELECT 1
FROM email e
WHERE e.fromemailaddress = f.fromemailaddress
AND e.subject ILIKE '%tester%'
);
Brug dette i stedet.
Hvis der skulle være flere rækker i tabellen email med den samme fromemailaddress matcher en række i fromemailaddress , så udfører denne formular kun én opdatering pr. række i modsætning til din uheldige original.
Bliv ikke forvirret af det faktum, at fromemailaddress bruges som kolonne og som tabelnavn her.
Læs manualen omhyggeligt her og her . Især denne bit: