Muitas vezes é necessário fazer um insert de dados em uma tabela trazendo resultados de outra na mesma base ou em bases diferentes. Como fazer? Simples:
INSERT INTO banco.tabela-destino (campo1, campo2, campo3...) SELECT campo1,campo2,campo3... FROM banco.tabela-origem;
Atente-se para que os campos estejam na mesma seqüência tanto na instrução INSERT quanto na instrução SELECT pois é seguida a seqüência de campos em ambas as instruções. Também não se esqueça do ponto e vírgula no final da última instrução. Imprescindível.
CODARE de parabéns! Está no meu leitor de feeds…
Só para acrescentar que o mesmo pode ser feito com UPDATE, desde que não da mesma tabela. ;)
Esta é a idéia Diogo, a sequência de INSERT e SELECT pode ser feita dentro da mesma, o que não é possível com o UPDATE.
Obrigado pela visita.
Achei muito bom o insert com select, mas como faço para habilitar o connect em dois db’s diferentes ao mesmo? Pois no meu caso preciso mover dados entre duas tabelas de bancos diferentes.
Rápido e rasteiro uhsuhsuh
Obrigado pela dica!
Silvana,
Temos dois bancos, sendo eles representados por “A” e “B”, o banco “A” será especificado na cláusula “Insert” o banco “B” na cláusula “Select”, conforme código descrito abaixo:
INSERT INTO banco_A.tabela-destino (campo1, campo2, campo3…)
SELECT campo1,campo2,campo3… FROM banco_B.tabela-origem;
sera que assim nao funciona?
INSERT INTO visitas (
`idvisitas` ,
`iddmeu` ,
`iddamigo` ,
`ddatehora` ,
`ip`
)
VALUES (
NULL , ’7′, ’90′, ’2011-03-22 08:22:39′, ’1′
)
WHERE ip !=’1′);
Não, não funciona frentis, insert não aceita WHERE clause
Olá pessoal, eu tenho uma dúvida, toda vez presciso fazer duas consultas uma para verificar se a registros, se tiver eu coloco um if no php e se caso der zero dou um insert ou dou um update. Tem com colocar tudo em uma query?
Olá
Preciso selecionar todos os dados de uma tabela e inserir todos estes dados noutra tabela, no memso banco. Só consegui inserir uma linha com os dados.
Se algúem poder me ajudar !
Obrigado,
Arilson
Seguem os códigos.
$query="SELECT limpas.* FROM limpas WHERE lrg ='$tombo_rg' ";
$resultado = mysql_query($query) or die(mysql_error());
$cont= mysql_num_rows($resultado) or die (mysql_error());
while($row = mysql_fetch_array($resultado))
{
$lrg= $row["lrg"];
$ocodata =$row["ocodata"];
$assunto =$row["assunto"];
$historico= $row["historico"];
}
$sql = "INSERT INTO tombolimpas (lrg, ocodata, assunto,historico
)
VALUES ('$lrg', '$ocodata', '$assunto', '$historico' )";
$result = mysql_query($sql) or die(mysql_error());
Boa Tarde
Utilizei a idéia do post e deu certo.
Troquei todo alquele código já postado por este:
$sql = "INSERT INTO tombolimpas (lrg, ocodata, assunto, historico) SELECT lrg, ocodata, assunto, historico FROM limpas WHERE lrg = '$tombo_rg'";
$result = mysql_query($sql) or die(mysql_error());
Boa Tarde, estou iniciando em PHP e estou com um problema…
Exemplo:
tabela entrada;
id_codigo
valor1
tabela saida;
id_codigo_saida
valor2
tabela situacao;
total
preciso fazer o total ser a subtração do valor1 – valor2
nao sei como fazer.
alguem pode me ajudar?
Se está fazendo com PHP, basta trazer os valores dos campos, subtraí-los e depois inserir na tabela nova. Simples assim.
Abraços
ótima dica, testei usando o Heidi e funcionou perfeitamente. Acredito que rodando dentro do PHPMYADMIN também funcione… mas como vou fazer isso no código PHP, pois pelo que sei posso conectar apenas em um banco de cada vez.
Me compreende?
Abraço!
Olá Carlos,
Você pode se conectar via PHP a quantos DB’s quiser ao mesmo tempo. Se você observar a função
mysql_connect
do PHP, poderá ver que o primeiro parâmetro é o servidor. Trocando este parâmetro poderá fazer a conexão.Alguns exemplos podem ser vistos em:
http://bytes.com/topic/php/answers/721490-connecting-two-mysql-tables-different-databases
Abs
Paulino
Olhei o link que me mandou e achei que iria dar certo, mas não deu não.
Quero selecionar os dados de uma tabela e passar para outra tabela, porém elas não estão na mesma base de dados, são dois bancos mysql.
tenho no meu PHP a query abaixo, sendo que a tabelaA esta em um banco chamado “dados” a tabelaB está em um banco chamado de “antigo”
$query=”INSERT INTO tabelaA (campo1, campo2, campo3…)
SELECT campo1,campo2,campo3… FROM tabelaB”
mysql_query($query, ?) // passo quais das conexões aqui a que conecta no primeiro ou no segundo banco. Qualquer uma que passo da erro.
Grato amigo
Acho que vc esqueceu de dizer os nomes dos bancos antes das tabelas.
tabelaA.bancoX
Verifique
Como faço a leitura de tres tabelas
para inserir e uma diferente
exemplo:
select produto id,( listagem de produtos)
select bem id,(aqui seria teria a opçao 0 =RMA e 1 = RMB )
setect recurso id, (0 =FAT e 1 =tesouro)
isso seria inserido em outras duas tabelas para gerar 2 relatorios distintos RMA e RMB com opçoes de FAT e Tesouro
Como faço para fazer um insert em uma tabela utilizando um valor fixo e um select?
Exemplificando, eu preciso inserir valores de duas tabelas, sendo que teria de ser um determinado valor de uma das tabelas e vários valores de outra tabela, para que ficasse assim:
Tabela X
Coluna A Coluna B
555 115
555 135
555 138
555 139
555 142
Neste caso, a tabela teria de ter a coluna A com um valor da tabela Y e este valor seria sempre igual. A coluna B receberia os dados de um campo da tabela Z de acordo com um select.
Do mesmo jeito.
INSERT INTO Tabela X (Coluna A, Coluna B)
(SELECT 555, Valor_Do_Select FROM Tabela Y)
No meu caso, uso gerenciador MySql e C#
Posso também iniciar 2 MySqlCommand e 2 MySqlConnection
um para cada banco… 1 para o INSERT e outro para o SELECT
certo?
Preciso selecionar dados de uma tabela e por na outra, nome dos campos são diferentes também… Alguma dica de como fazer isso ?! :D
Pessoal, tenho a necessidade de fazer um select que gere comando “instert into” para cada linha de select, porem que nao insira em nenhuma tabela. Que me gere somente o comando em texto.
Tenho 2 bancos de daod iguais, mas em servidores que nao tem nenhuma ligacao entre si. O objetivo é fazer o select na origem e o insert no destino.
Tem como?
Grato
Boa noite, eu preciso de uma ajuda, estou tentando inserir o registro mas precisava gerar um id de acordo com o último registro na minha tabela é possível ?
Obrigado desde já.
Tente o uso da função LAST_INSERT_ID() que sempre traz o último ID gerado.
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
Abs
Pessoal estou tentando fazer isso no meu banco mas não estou conseguindo o que estou errando???
NSERT INTO `adm`.`tb_operador_historico`
(`USERNAME`,
`HORA`,
`DATA`,
`NM_OPERADOR`)
VALUES
(
‘pedrod’,
’12’,
‘2013-08-03’,
select NM_OPERADOR,username from TB_OPERADOR where username like ‘pedrod’
);
lol
Primeiro esta faltando o I no INSERT
INSERT INTO `adm`.`tb_operador_historico`
(`USERNAME`,`HORA`,`DATA`,`NM_OPERADOR`)
VALUES (‘pedrod’,’12’,’2013-08-03′, (select NM_OPERADOR,username from TB_OPERADOR where username like ‘pedrod’)
);
Como faço um insert numa tabela, trazendo somente um registro de outra tabela?
Estou tributando uma série de produtos. Na tabela de tributação tenho além das colunas dos tributos, tenho a coluna codigo do produto que puxa da tabela de produtos. Tenho que ir inserindo cada produto com sua tributação.
Agradeço desde já pela ajuda.
Até que em fim alguém que soube explicar esta situação de maneira didática e clara.
Parabéns pelo post!!!
Reativando o post, pois foi o melhor que encontrei…
Preciso duplicar registros de uma tabela, conforme uma condicional aplicada em um determinado campo. Exemplo:
Tabela site_rodape com os campos:
ID, edicao, idioma, rodape_texto
1 13 portugues texto
1 14 portugues texto
2 14 ingles texto
3 14 espanhol texto
4 14 frances texto
…
preciso duplicar todos os registros da tabela onde ‘edicao’ = 14 … trocando para 15 (edição +1), incrementando o ID.
Se utilizo a setença no phpMyAdmin:
INSERT INTO site_rodape (edicao, idioma, rodape_texto)
SELECT 15, idioma, rodape_texto FROM site_rodape
WHERE edicao=’14’
…. funiona perfeitamente… são criados os IDs 5,6,7 e 8 com os mesmos conteúdos, trocando a edição para 15.
Mas como fazer para que funcione num script PHP (por exemplo: criar_edicoes.php)?
Efetuei várias tentativas, que não retornam nenhum erro, mas não processam.
Grato a quem puder ajudar.
Pedro,
Certamente você está usando a função mysql_query() do PHP. Se é isso, uma má notícia para você. Esta função não permite a execução de queries simultâneas e por isso deve estar tendo problemas.
Dê uma olhada nesta URL. Ela pode lhe ajudar:
http://www.dev-explorer.com/articles/multiple-mysql-queries
Saudações
Olá Paulimo,
Primeiramente, obrigado pela presteza. Acessei o link, mas não se trata de nossa necessidade. Apesar de usarmos mysql_query(), não processamos simultâneas.
Conseguimos processar, utilizando o código abaixo (trecho):
==============
$checa_edicao = mysql_query(“SELECT * FROM `configuracoes` WHERE `descricao`=’edicao_atual’ and `valor`=’$atual[valor]'”) or die (“Erro ao buscar edicao atual.”);
$busca_edicao = mysql_fetch_array($checa_edicao);
$atual = $busca_edicao[‘valor’];
$query2 = “SELECT * FROM site_rodape where edicao=’$atual'”;
$result2 = mysql_query($query2) or die(mysql_error());
$cont= mysql_num_rows($result2) or die(mysql_error());
while($row = mysql_fetch_array($result2))
{
$idioma = $row[“idioma”];
$rodape_texto = $row[“rodape_texto”];
$edicao = $row[“edicao”];
$edicao_trabalho = $edicao + 1;
$insere = “INSERT INTO `site_rodape` (`edicao`, `idioma`, `rodape_texto`) VALUES (‘$edicao_trabalho’, ‘$idioma’, ‘$rodape_texto’)”;
$result = mysql_query($insere) or die(mysql_error());
}
===============
Saudações.
Ótima dica!
Obrigado.
Bom dia, poderiam me ajudar neste caso, de um insert de dados de uma tabela temporaria ?
CREATE TEMPORARY TABLE qproe AS (SELECT loja, probarx, MAX(proano) as proano, MAX(promes) as promes from dbft_vcaproe where proano<=xanoa AND promes<=xmesa group by loja, probarx);
CREATE TEMPORARY TABLE qproe1 AS (SELECT dbft_vcaproe.* from dbft_vcaproe,qproe where dbft_vcaproe.proano=qproe.proano AND dbft_vcaproe.promes=qproe.promes);
insert into dbft_vcaproe (loja, probarx, procod, proano, promes, proqan, procan, proqat, procat, prodcp, proded, prodeo, prodvd, prodsd, prodso) values ('qproe1.loja', 'qproe1.probarx', 'qproe1.procod', 'qproe1.proano', 'qproe1.promes', 'qproe1.proqat', 'qproe1.procat', 'qproe1.proqat', 'qproe1.procat', '0000-00-00', '0000-00-00', '0000-00-00', '0000-00-00', '0000-00-00', '0000-00-00') ;
isso está em uma procedure no mysql, porem como deve ser colocado os dados no "value" ?, pq se eu deixar sem as aspas simples ou duplas, da erro de coluna nao existe.
Abs,.
Muito bom o post, esta de parabéns…
Gostaria de compartilhar com todos a seguinte instrução que encontrei na internet a algum tempo atrás, que insere na tabela caso não exista na tabela:
INSERT INTO nome_da_tabela (campo_um, campo_dois, campo_tres, campo_n)
SELECT “valor_campo_um”,”valor_campo_dois”, “valor_campo_tres”, “valor_campo_n”
FROM DUAL WHERE NOT EXISTS (SELECT * FROM nome_da_tabela WHERE campo_um = “valor_campo_um_a_verificar”);
Bom espero ter ajudado!
Senhores,
Será que eu conseguiria um inner join no select?
exemplo:
INSERT INTO tabela_destino(campo1,campo2,campo3…)
SELECT c.codigo_cidade,o.campo2,o.campo3… FROM tabela_origem o
INNER JOIN cidades c ON o.campo1 = c.nome_cidade;
Explico:
A tabela de origem foi criada há muitos anos, quando ainda não se falava em banco de dados relacional. Então, nela foi armazenado o nome da cidade, e não o código, como preciso fazer na tabela destino. Assim, pego o nome da cidade na tabela origem e verifico na tabela cidades qual o seu respectivo código para inserir na tabela destino.
Acho que é isso, valeu a quem puder me ajudar!!