



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:
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] |
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.
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] ) |
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.
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] |
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.