Você pode juntar tabelas adicionais em um
UPDATE
declaração, permitindo esta forma preferível:UPDATE books b
SET author_id = a.author_id
FROM authors a
WHERE b.author = a.author_name;
Três razões:
-
É mais seguro. Sua consulta escreverá um valor NULL em cada linha onde nenhum autor correspondente for encontrado. Isso não importa no seu caso, mas pode potencialmente levar à perda de dados em consultas semelhantes em que você já tem dados na coluna a ser atualizado. Minha alternativa não faz nada se nenhum autor correspondente for encontrado.
-
É mais rápido. O acima para um. Mas também porque subconsultas correlacionadas como se você tivesse escala terrivelmente. A junção em uma tabela geralmente é mais rápida, especialmente com mais do que algumas linhas.
-
É mais limpo e mais facilmente adaptado a colunas adicionais.