UPDATE
fråga du visar är exakt densamma 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%'
är en snabbare motsvarighet för subject ~ 'tester'
. Detaljer för LIKE
, ILIKE
och matchning av reguljära uttryck (~
) i manualen
eller i detta relaterade svar på dba.SE:
Och effektivt samma som:
UPDATE fromemailaddress f
SET call = true
WHERE EXISTS (
SELECT 1
FROM email e
WHERE e.fromemailaddress = f.fromemailaddress
AND e.subject ILIKE '%tester%'
);
Använd detta istället.
Om det ska finnas flera rader i tabellen email
med samma fromemailaddress
matchar en rad i fromemailaddress
, då kör detta formulär bara ett uppdatering per rad, till skillnad från ditt olyckliga original.
Bli inte förvirrad av det faktum att fromemailaddress
används som kolumn och som tabellnamn här.
Läs manualen noggrant här och här . I synnerhet denna bit: