MySQL - Fazendo Insert com Subquery



Muitas pessoas utilizam scripts PHP para ler dados de uma tabela do DB e jogar em outra porém isso pode ser feito diretamente através do MySQL de maneira muito fácil e muito mais rapidamente.

Vamos a um exemplo em que lemos os nomes femininos de uma tabela 'nome' e os referenciamos em uma tabela chamada 'empresarias'.

Tabela 'nome'

id | nome | genero
1Pedrom
2Souzam
3Santiagom
4Anaf
5Rosaf
6Tomm
7Tobiasm
8Otaviom
9Hugom

Tabela 'empresarias' com o campo 'id' AUTO INCREMENT

id | id_nome

Se fizermos um Select simples da tabela 'nome':

 SELECT   
      *   
 FROM   
      nome   
 WHERE   
      genero = 'f'  

Teremos como resultado

id | nome | genero
4Anaf
5Rosaf

Ok, são estes dados que queremos referenciar na tabela 'empresarias'. Como proceder agora?

Podemos inserir diretamente os dados de uma tabela em outra utilizando o SELECT (uma subquerie) como origem. Vamos inserir todos os nomes femininos na tabela 'empresarias'

 INSERT INTO   
 empresarias   
 (  
      id_nome  
 )  
 SELECT   
      id   
 FROM   
      nome   
 WHERE   
      genero = 'f'  

Veja que em nosso novo select especificamos como único campo de retorno 'id' pois queremos apenas os ids dos nomes femininos. Quando fazemos INSERTS baseados em SELECTS devemos sempre tomar o cuidado de 'casar' a quantidade de campos e sua ordem.

Como 'empresarias' é uma tabela de referência não precisamos inserir todos os dados, inserimos apenas o id. Temos como resultado:

id | id_nome
14
25

cujos ids coincidem com nosso select anterior.

Boa sorte!

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()