MySQL - Fazendo Update com Subquery

Updates às vezes são bem chatos, principalmente quando devemos atualizar uma determinada tabela baseado em outra. Mas nem tudo está perdido!
Podemos utilizar as sempre úteis Subqueries ou Subselects para fazer este tipo de atualização.
Vamos definir as nossas tabelas base:

Tabela 'site'

id nome url tipo acessos
1 Wikipedia Home http://www.wikipedia.org/ home 0
2 Wikipedia NASA http://en.wikipedia.org/wiki/NASA article 0
3 Wikipedia Planetas http://pt.wikipedia.org/wiki/Planeta article 0

Tabela 'tag'

id id_site nome
1 2 Agência
2 2 Estados Unidos
3 2 Pesquisa
4 3 Espaço
5 1 Wiki
6 3 Espaço
7 1 Wiki
8 2 Espaço

Vamos atualizar na tabela 'site' os campos 'acessos' baseado na tabela 'tag'
Primeiro vamos selecionar todas as tags cujo 'nome' seja igual a 'Espaço'

SELECT 
     id_site 
FROM 
     tag 
WHERE 
     nome = 'Espaço'

id_site
3
3
2

Este resultado será utilizado em nosso Update. Para concluir a query inserimos este select como um subselect. Vamos atualizar o campo 'acessos' na tabela 'site' com o valor 101.

UPDATE 
     site 
SET 
     acessos = 101 
WHERE 
     id IN (
          SELECT 
               id_site 
          FROM 
               tag 
          WHERE 
               nome = 'Espaço'
     )

Como resultado temos a tabela 'site' atualizada da seguinte forma:

id nome url tipo acessos
1 Wikipedia Home http://www.wikipedia.org/ home 0
2 Wikipedia NASA http://en.wikipedia.org/wiki/NASA article 101
3 Wikipedia Planetas http://pt.wikipedia.org/wiki/Planeta article 101

É isto.

Comentários

Postagens mais visitadas deste blog

MySQL - Completando quantidades fixas de caracteres com as funções LPAD() e RPAD()

MySQL - Clonando tabelas na linha de comando

PHP - Gerando arquivo em UTF-8 com fwrite() e utf8_encode()