Ser Programador

Select Update no MySQL

Aprendendo como executar update em uma tabela a partir dos dados de outra tabela


Olá, pessoal!

É sabido que se pode efetuar insert's em uma tabela de acordo com o retorno do select de outra tabela, mas é possível fazer o mesmo com updates? É exatamente o que veremos neste post.

Antes de mais nada vamos relembrar rapidamente do script de udpdate. A sintaxe é como segue:

        update tb_usuarios
        set
        	nome	= 'Fulano',
            idade	= 29,
            cpf		= '33399955577'
        where id_usuario = 100
    

Aqui atualizo três campos (nome, idade e cpf) na tb_usuarios onde o id_usuario é 100. Até então nenhuma novidade.



O MySQL não aceita trabalhar com uma cláusula select juntamente a um update.


Sendo assim, como já diz o ditado "a coisa é mais em baixo". A única alternativa que nos resta é o querido amigo INNER JOIN.

Efetuando um update ligando os campos da tabela do update com um inner join conseguimos então resgatar valores de uma outra tabela para atualizar a tabela que queremos.

Vejamos um exemplo:

        update tb_logins l
        inner join tb_usuarios u
        	on u.id_usuario = l.id_usuario
        set
        	l.login	= u.cpf,
            l.senha = sha1(u.cpf)
    

O objetivo do script acima é atualizar todos os logins e senhas (com criptografia SHA1) para o próprio cpf do usuário.

O que fiz foi basicamente ligar a tb_usuarios à tb_logins através de sua chave primária (id_usuario) e através do álias de cada tabela efetuo a configuração dos campos que desejo atualizar no set.


Lembrando que aqui também é possível efetuar filtros com where normalmente.

Por exemplo:

        update tb_logins l
        inner join tb_usuarios u
        	on u.id_usuario = l.id_usuario
            and u.id_usuario = 100
        set
        	l.login	= u.cpf,
            l.senha = sha1(u.cpf)
    

Desta forma o script atualiza o login e senha apenas do usuário de id 100.