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: