UPDATE wyświetlane zapytanie jest dokładnie takie samo jak:
UPDATE fromemailaddress f
SET call = true
FROM (
SELECT fromemailaddress
FROM email
WHERE subject ILIKE '%tester%'
) e
WHERE e.fromemailaddress = f.fromemailaddress;
subject ILIKE '%tester%' jest szybszym odpowiednikiem subject ~ 'tester' . Szczegóły dotyczące LIKE , ILIKE i dopasowywanie wyrażeń regularnych (~ ) w instrukcji
lub w tej powiązanej odpowiedzi na dba.SE:
I skutecznie to samo co:
UPDATE fromemailaddress f
SET call = true
WHERE EXISTS (
SELECT 1
FROM email e
WHERE e.fromemailaddress = f.fromemailaddress
AND e.subject ILIKE '%tester%'
);
Użyj tego zamiast.
Jeśli w tabeli powinno być wiele wierszy email z tym samym fromemailaddress dopasowanie wiersza w fromemailaddress , wtedy ten formularz wykonuje tylko jeden aktualizacja na rząd, w przeciwieństwie do twojego nieszczęsnego oryginału.
Nie daj się zwieść faktowi, że fromemailaddress jest tutaj używany jako kolumna i jako nazwa tabeli.
Przeczytaj uważnie instrukcję tutaj i tutaj . W szczególności ten fragment: