Como fazer um update com JOIN no MySQL?
Fala galera do Show Delphi, tudo beleza?
Hoje vamos a mais uma dica de SQL, utilizando o banco de dados MySQL.
Vamos a pergunta de hoje:
É possível atualizar vários registros fazendo a junção de tabelas?
Sim, isso é perfeitamente possível. Observe que para fazer a junção (join) é necessário que haja um campo em comum entre as duas tabelas, ou seja, um campo que faça a ligação de uma entidade com a outra.
Confuso? Veja como ficaria a sintaxe deste comando.
1
2
3
| UPDATE TABELA a
JOIN TABLEB b ON a.colA = b.colB
SET a.columnToUpdate = [VALOR] |
UPDATE TABELA a
JOIN TABLEB b ON a.colA = b.colB
SET a.columnToUpdate = [VALOR]
Vamos examinar a instrução UPDATE acima em maiores detalhes:
Logo após a instrução UPDATE, temos a tabela principal que será atualizada.
Abaixo, há a junção de outra tabela, onde utilizamos a instrução JOIN, juntando a tabela A com a B de acordo que as duas tenham a mesma chave. Este JOIN pode ser; INNER, LEFT, RIGHT, ETC…dependendo da sua necessidade e entendimento.
E finalmente o SET que determina os nomes das colunas da tabela e os novos valores. Lembrando que os novos valores podem ser valores literais, números, resultado de expressões ou sub consultas.
E fazer atualização dos registros a partir de um SELECT, também é possível?
Sim, isso também é possível. O importante para este tipo de procedimento é prestar bem atenção nos nomes dos campos da tabela e mais, na sequência das informações. Elas precisam estar na mesma ordem para que não haja problemas, senão podem ocorrer erros, ou pior, trocar a ordem das informações, vamos ao exemplo:
1
2
3
| UPDATE TABELA_A SET CAMPO1 = (
SELECT CAMPO_TABELA_B FROM TABELA_B WHERE id = [VALOR]
) |
UPDATE TABELA_A SET CAMPO1 = (
SELECT CAMPO_TABELA_B FROM TABELA_B WHERE id = [VALOR]
)
Perceba que na TABELA B, foi solicitado somente um campo, sendo este campo o valor que eu quero obter. Se eu errar e colocar uma coluna qualquer, pode haver erro, mas somente se os tipos de dados forem diferentes. Portanto nesse passo é preciso prestar atenção para buscar os dados que realmente deseja.
Consigo fazer o UPDATE com JOIN?
Felizmente a resposta é SIM! Ao menos no MySQL. É possível fazer quase tudo que imaginamos, basta pesquisar e tomar cuidado com instruções novas. Sempre é bom fazer um BACKUP antes fazer testes, principalmente com comandos que ainda não temos domínio e, pode ter certeza, mesmo tendo domínio, uma distração você pode botar tudo a perder e ter uma enorme dor de cabeça, portanto sempre é bom ter um BACKUP, fica a dica.
E a SINTAXE para atualizar os registros com junção (JOIN) de tabelas ficaria da seguinte forma:
1
2
3
4
5
6
7
| UPDATE TABELA_A a
INNER JOIN TABELA_B b ON a.ID_A = b.ID_B
SET
a.CAMPO1 = [VALOR],
a.CAMPO2 = [VALOR],
a.CAMPO3 = [VALOR]
WHERE b.CAMPO_TABELA_B = [VALOR] |
update TABELA_A a
inner join TABELA_B b on a.ID_A = b.ID_B
set
a.CAMPO1 = [VALOR],
a.CAMPO2 = [VALOR],
a.CAMPO3 = [VALOR]
WHERE b.CAMPO_TABELA_B = [VALOR]
No exemplo acima, estamos atualizando a TABELA A, onde a TABELA B tenha um campo em comum com A e utilizando o SET para determinar os nomes das colunas da tabela e os novos valores, restringindo os valores de acordo com a instrução WHERE, onde somente serão atualizados os registros com valores que sejam iguais a TABELA B.
Note também, que logo após o nome da tabela tem um PREFIXO, ou seja, podemos dar um nome (alias) qualquer para ela, onde a partir deste momento sempre que precisarmos nos referir a ela, basta usarmos o PREFIXO (a, b, etc…)
Faça testes, mas lembre-se, sempre fazendo BACKUP antes para não perder seus dados, sejam eles de qualquer importância.
Espero que seja útil a todos.
Fonte de referência: https://www.gigasystems.com.br/artigo/65/update-a-partir-de-um-select-join
Um abraço e até o próximo post.
-
Giovani Da Cruz
-
4.946 views
- 0 comentários
- 7 de novembro de 2020
Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!
Posts Relacionados - Continue Aprendendo