Das UPDATE Abfrage, die Sie anzeigen, ist genau dasselbe wie:
UPDATE fromemailaddress f
SET call = true
FROM (
SELECT fromemailaddress
FROM email
WHERE subject ILIKE '%tester%'
) e
WHERE e.fromemailaddress = f.fromemailaddress;
subject ILIKE '%tester%' ist ein schnelleres Äquivalent für subject ~ 'tester' . Details für LIKE , ILIKE und Übereinstimmung mit regulären Ausdrücken (~ ) im Handbuch
oder in dieser verwandten Antwort auf dba.SE:
Und effektiv dasselbe wie:
UPDATE fromemailaddress f
SET call = true
WHERE EXISTS (
SELECT 1
FROM email e
WHERE e.fromemailaddress = f.fromemailaddress
AND e.subject ILIKE '%tester%'
);
Verwenden Sie stattdessen dies.
Wenn in der Tabelle email mehrere Zeilen vorhanden sein sollen mit derselben fromemailaddress Übereinstimmung mit einer Zeile in fromemailaddress , dann führt dieses Formular nur eine aus Aktualisierung pro Zeile, im Gegensatz zu Ihrem unglücklichen Original.
Lassen Sie sich nicht von der Tatsache verwirren, dass fromemailaddress wird hier als Spalten- und als Tabellenname verwendet.
Lesen Sie das Handbuch sorgfältig hier und hier . Insbesondere dieses Bit: