Usando update com inner join. (MySql)

Imagine a situação: Você tem uma tabela com os dados de um produto e outra tabela com uma coluna complementar. As duas tabelas possuem um campo que pode (seguramente) ser utilizado como chave. Neste post mostro como criar um update com inner join, para que você possa atualizar uma das tabelas com os dados da outra.

Imagine a tabela PRODUTO:

  • prod_id
  • prod_nome
  • prod_descricao
  • prod_status

E a tabela PRODUTO_AUXILIAR:

  • aux_id
  • prod_id
  • prod_status

 

Acho importante mencionar que estas tabelas só tem duas utilidades:

  1. Servir de exemplo neste post;
  2. Servir de exemplo de uma péssima arquitetura de banco 😛 ;

 

O que queremos é atualizar a coluna prod_status (da tabela produto) com a informação que consta na coluna prod_status da tabela produto_auxiliar onde o prod_id seja menor que 10. A coluna prod_id das duas tabelas pode ser utilizada como chave na ligação de um inner join.

 

Este é um update razoavelmente simples:

update PRODUTO p
  inner join PRODUTO_AUXILIAR pa on p.prod_id = pa.prod_id
    set p.prod_status = pa.prod_status
where p.prod_id < 10;

A sintaxe do inner join para o update é feita logo após a definição do nome da tabela que será atualizada.

Neste exemplo, se você quiser atualizar todos os registros da tabela produto com as informações da tabela produto_auxiliar, poderia simplesmente remover a clausula where, uma vez que o inner join vai ‘filtrar’ as linhas afetadas.

 

Quer testar, mas não sabe se vai funcionar? Não seja –aquele estagiário–, utilize as transações:

  • Utilize o comando START TRANSACTION;
  • Faça os testes e confira os resultados;
  • Utilize o commando ROLLBACK; (ou, se tudo der certo, o COMMIT;)

 

 

Espero ter ajudado!

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Banco de Dados, Dev and tagged , , , .