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: