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 :