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: