Atualizar dados em uma tabela com base em outra consulta é um cenário comum no dia a dia com MySQL. Porém, nem sempre a sintaxe mais intuitiva funciona corretamente.
O Problema
Você precisa atualizar uma tabela (cursos) com dados vindos de outra (cursos_abas), filtrando por uma condição específica (ex: título = ‘APRESENTAÇÃO’).
Tentativas usando subquery direta no UPDATE podem falhar ou gerar comportamentos inesperados dependendo da estrutura.
A Solução
Utilize um UPDATE com JOIN, que é a forma mais segura e performática nesse tipo de operação:
UPDATE cursos dest JOIN cursos_abas src ON dest.id = src.curso_id SET dest.introducao = src.html WHERE src.titulo = 'APRESENTAÇÃO'; |
Por que usar JOIN?
O JOIN permite relacionar diretamente as tabelas no momento do UPDATE, evitando ambiguidades e garantindo melhor performance.
Evite isso:
UPDATE cursos dest, (SELECT * FROM cursos_abas WHERE titulo = 'APRESENTAÇÃO') AS src SET dest.introducao = src.html WHERE dest.id = src.curso_id; |
Apesar de funcionar em alguns casos, esse padrão pode causar problemas de leitura, manutenção e até inconsistência dependendo do volume de dados.
Conclusão
Para atualizar registros com base em outra tabela no MySQL, prefira sempre UPDATE com JOIN. É mais claro, performático e confiável para cenários reais.