MySQL: INSERT com SELECT na mesma query

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.

This entry was posted in MySQL and tagged , , , , . Bookmark the permalink.

19 Responses to MySQL: INSERT com SELECT na mesma query

  1. Fabiano Monteiro says:

    CODARE de parabéns! Está no meu leitor de feeds…

  2. Diogo Souza says:

    Só para acrescentar que o mesmo pode ser feito com UPDATE, desde que não da mesma tabela. ;)

  3. 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.

  4. Silvana says:

    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.

  5. VitorGGA says:

    Rápido e rasteiro uhsuhsuh

  6. Tarilonte says:

    Obrigado pela dica!

  7. GIOVANNI CRUZ says:

    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;

  8. frentis says:

    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′);

  9. 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?

  10. arilson piovezan says:

    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

    • arilson piovezan says:

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

  11. arilson piovezan says:

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

  12. Jairo Junior says:

    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?

  13. Paulino Michelazzo says:

    Se está fazendo com PHP, basta trazer os valores dos campos, subtraí-los e depois inserir na tabela nova. Simples assim.

    Abraços

  14. ó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!

  15. Paulino Michelazzo says:

    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

  16. 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

  17. Paulino Michelazzo says:

    Acho que vc esqueceu de dizer os nomes dos bancos antes das tabelas.

    tabelaA.bancoX

    Verifique

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>