MySql
Insert a partir de um Select no MySql
Olá, neste artigo vamos mostrar de várias maneiras, como inserir dados de uma tabela em outra, utilizando o MYSQL.
Muitas vezes é necessário fazer um INSERT de dados em uma tabela (“ALVO”) trazendo resultados de outra tabela (“ORIGEM”) na mesma base de dados ou em bases diferentes. Para fazer esta instrução SQL na mesma base de dados, podemos até omitir o banco de dados, desde que esteja com ele selecionado. Agora, para bases diferentes, é imprescindível o uso do nome do banco, senão é óbvio que irá dar erro, pois ele não saberá quem é MARIA e quem é JOANA.
Pois bem, então como fazer?
Podemos fazer da seguinte forma:
INSERT INTO banco.tabela-alvo (campo1, campo2, campo3...) SELECT campo1, campo2, campo3... FROM banco.tabela-origem;
Atente-se para que os campos estejam na mesma sequência tanto na instrução INSERT quanto na instrução SELECT, pois é seguida a sequência de campos em ambas as instruções, como na regra que aprendemos da instrução INSERT. Também não se esqueça do ponto e vírgula no final da última instrução. Imprescindível!
Mas por exemplo, se eu quiser importar os dados de duas tabelas para uma terceira tabela como seria? Eu posso descriminar os campos que desejo importar?
Sim, você pode fazer qualquer SELECT, descriminando os campos e usando duas tabelas. O importante é que o número dos campos que você retorne e os tipos do mesmo tenham correspondência com os campos que você especificar no INSERT.
No exemplo a seguir, estou inserindo na TABELA_ALVO, dados de duas tabelas: CLIENTE e DEPARTAMENTO, sendo que os campos NOME e IDADE vem de Cliente.Nome e Cliente.Idade e DEPARTAMENTO vem de Departamento.Nome_Dept
INSERT INTO TABELA_ALVO(NOME, IDADE, DEPARTAMENTO) SELECT CLI.NOME, CLI.IDADE, DEP.NOME_DEPT FROM CLIENTE CLI, DEPARTAMENTO DEP WHERE CLI.NUM_DEPT = DEP.NUM_DEPT
Também podemos fazer o exemplo acima utilizando JOIN desta forma:
INSERT INTO TABELA_ALVO(NOME, IDADE, DEPARTAMENTO) SELECT CLI.NOME, CLI.IDADE, DEP.NOME_DEPT FROM CLIENTE CLI INNER JOIN DEPARTAMENTO DEP ON CLI.NUM_DEPT = DEP.NUM_DEPT
Esta técnica é muito utilizada para fechamento do mês, onde a qualquer momento você precise dos dados rapidamente para gerar um gráfico de demonstração de resultados, um auxiliar para gerar SPED, ou seja, seu uso pode servir para vários fins, depende da sua necessidade.
Se tiverem sugestões, duvidas ou reclamações comentem... e bons estudos!!!
Gigasystems Login:
Informe seu e-mail abaixo para continuar!
XVeja Também:
Artigos Relacionados a categoria: MySql
Backup e Restore do banco de dados Mysql
03 July de 2015
Formatando datas no MySql com DATE_FORMAT()
20 March de 2015
SQL_CACHE otimizando suas consultas SQL do MySql
20 March de 2015
UPDATE a partir de um SELECT, JOIN
28 January de 2015
Olá, deixe seu comentário para Insert a partir de um Select no MySql
josé netto
Olá.. eu preciso enviar dados de uma tabela para a outra que tem estruturas iguais, só mudam os nomes das tabelas... como eu fiz:
INSERT INTO tborigem('ID','user_login','user_pass','user_nicename','user_email',
'user_url','user_registered','user_activation_key','user_status','display_name')
SELECT ('ID','user_login','user_pass','user_nicename','user_email',
'user_url','user_registered','user_activation_key','user_status','display_name') FROM tbdestino;