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.

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

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>