A
UPDATE
consulta exibida é exatamente igual a:UPDATE fromemailaddress f
SET call = true
FROM (
SELECT fromemailaddress
FROM email
WHERE subject ILIKE '%tester%'
) e
WHERE e.fromemailaddress = f.fromemailaddress;
subject ILIKE '%tester%'
é um equivalente mais rápido para subject ~ 'tester'
. Detalhes para LIKE
, ILIKE
e correspondência de expressão regular (~
) no manual
ou nesta resposta relacionada em dba.SE:E eficaz o mesmo que:
UPDATE fromemailaddress f
SET call = true
WHERE EXISTS (
SELECT 1
FROM email e
WHERE e.fromemailaddress = f.fromemailaddress
AND e.subject ILIKE '%tester%'
);
Use isso em vez disso.
Se houver várias linhas na tabela
email
com o mesmo fromemailaddress
correspondendo a uma linha em fromemailaddress
, este formulário só executa um atualização por linha, ao contrário do seu original infeliz. Não se confunda pelo fato de que
fromemailaddress
é usado como coluna e como nome de tabela aqui. Leia o manual com atenção aqui e aqui . Em particular este bit: