La UPDATE requête que vous affichez est exactement la même 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%' est un équivalent plus rapide pour subject ~ 'tester' . Détails pour LIKE , ILIKE et correspondance d'expression régulière (~ ) dans le manuel
ou dans cette réponse connexe sur dba.SE :
Et efficacement identique à :
UPDATE fromemailaddress f
SET call = true
WHERE EXISTS (
SELECT 1
FROM email e
WHERE e.fromemailaddress = f.fromemailaddress
AND e.subject ILIKE '%tester%'
);
Utilisez ceci à la place.
S'il doit y avoir plusieurs lignes dans la table email avec le même fromemailaddress correspondant à une ligne dans fromemailaddress , alors ce formulaire n'en exécute un mise à jour par ligne, contrairement à votre malheureux original.
Ne soyez pas confus par le fait que fromemailaddress est utilisé comme colonne et comme nom de table ici.
Lisez attentivement le manuel ici et ici . En particulier ce morceau :