Copiar dados de um tabela para outra em MySQL

Hoje precisei copiar dados de uma tabela para outra. Mas como fazer isso facilmente atraves de linha de comando? … vou dizer, mas antes vamos as premissas:

* Não quero registros repetidos, neste caso o e-mail

* Não quero todos os dados da tabela Servidor (onde vou pegar os dados).

* So quero os e-mails começados com a letra “a”.

Então, vamos a dica:


INSERT INTO tabela2  (nome, email) SELECT nome, email FROM tabela1 WHERE (email LIKE 'a%') GROUP BY email

Logico que os dados acima são fictícios, mas funciona. A explicação basica é:

1- O comando INSERT como outro qualquer na tabela2 (a que vai receber os dados)

2- Em seguida vem um SELECT normal tambem, com os campos que desejo importar na mesma ordem que eu coloquei para inserir.

3- O WHERE para a condição dos e-mails começando com a letra “a”.

4- O GROUP BY para não repetir os e-mails. Poderia usar tambem o DISTINCT ou similar, fica a critério do fregues.

Se tiver alguma duvida sobre MySQL pode perguntar, se eu souber irei responder com certeza.

74 comments

  1. Opa! INSERT … SELECT é muito útil sim… mas se vc ainda não tiver a tabela2, pode usar assim também:

    SELECT nome, email INTO tabela2 FROM tabela1 WHERE (email LIKE ‘a%’) GROUP BY email

  2. Diogo, to com umas idéias bacanas pro flogvip ! Uma delas pode até estimular os usuários a quererem o GoldVIP* ! Bom, eu tento falar contigo, mas nem sempre sou respondido. Caso te interesse as idéias e minha ajuda (sei que não é nada milagroso, mas é o que posso fazer pelo meu vício haha) me avise ! Abraço.

  3. No caso de eu ter duas conexões no banco, em uma está a tabela1, e na outra a tabela2; como faço pra criar a tabela1 com os dados da tabela2, sendo elas de “lugares” diferentes -uma não enxerga a outra?

  4. E se as tabelas tiverem nome diferente?

    Ex:

    INSERT INTO tabela2 (nome2, email2) SELECT nome, email FROM tabela1 WHERE (email LIKE ‘a%’) GROUP BY email

    Seria assim?

  5. Muito util o codigo obrigada

    Não sei se é aqui onde coloco a minha duvida, mas estou meio desesperado, é que eu preciso de um comando que faça o seguinte,

    quando inserir o numero de identificação de um produto, logo na text box do nome do produto gravado com o numero de identificação que digitamos, se existir tal comando por favor me ajude

  6. Muito util o codigo obrigada

    Não sei se é aqui onde coloco a minha duvida, mas estou meio desesperado, é que eu preciso de um comando que faça o seguinte,

    quando inserir o numero de identificação de um produto, logo na text box do nome do produto apareça o nome do producto correspondente ao numero de identificação que digitamos, se existir tal comando por favor me ajude *me expressei mal no post anterior*

  7. Euridio, isso é até facil de se fazer.

    Primeiro voce da o INSERT normal para ele gerar o ID, que deve ser uma chave primaria. Para recuperar este ID, use no PHP:
    $UltimoID = mysql_insert_id();

    Este comando deve estar logo abaixo a query insert do mysql. Ae depois é so você dar um UPDATE logo abaixo com o ID recuperado, ae resolve o seu problema.

  8. Oii, encontrei exatamente o que eu precisava… *-*
    fiz o que está ali e tals, e aconteceu algo estranho…
    quando eu cadastro os dados, após o ultimo passo eu coloquei os inserts…
    ai qndo fui olhar no bd, ele havia criado 3 nomes, um sem nenhum dos dados das outras tabelas, outro com um dos dados de uma das tabelas e sem nenhum nome, e o outro com o dado da outra tabela sem nome e semo dado da primeira tabela…
    não sei se fui clara… fiz um print do que aconteceu mas não sei se é possível colocar imagens aqui…

  9. Como faço para copiar os dados de uma tabela de um servirdor para outro?

    Quero fazer a cópia de determinados dados de uma tabela (TABELAX) do meu servidor de produção para o meu servidor BACKUP.
    Como posso fazer isso ????

  10. Bom Dia…
    Estou com um caso parecido… Tenho uma tabela1 com os seguintes paramentros (id_cham e nome) que quero enviar para a tabela2 so q ja tenho estes parametros criados…somente queria inserir os dados.. as colunas ja existem…teria como fazer isso?

  11. Não consegui usar como o Estêvão disse:
    “Opa! INSERT … SELECT é muito útil sim… mas se vc ainda não tiver a tabela2, pode usar assim também:

    SELECT nome, email INTO tabela2 FROM tabela1 WHERE (email LIKE ‘a%’) GROUP BY email”

    Assim funcionou:

    CREATE TABLE tabela_nova SELECT id, nome FROM tabela_antiga

    Referência: http://dev.mysql.com/doc/refman/5.0/en/create-table.html

  12. Boa noite

    Eu tenho uma tabela e gostaria de duplicar, de modo queseja criada uma linha logo abaixo, desta forma:

    andreia1 xxxx xxxx xxx
    andreia2 xxxx xxxx xxx

    Para ficar assim:

    andreia1 xxxx xxxx xxx
    andreia1 xxxx xxxx xxx
    andreia2 xxxx xxxx xxx
    andreia2 xxxx xxxx xxx

    Mas nao consigo encontrar uma formula para isso, alguem pode me ajudar?

    Grato

  13. Olá Diogo,

    qual comando devo utilizar para copiar em sua integridade uma tabela do bancoA para o bancoB?
    Não quero copiar os dados, quero acrescentar uma tabela inexistente no bancoB que só existe em bancoA, tem como?

  14. Olá Diogo,

    Tipo estou estou procurando algo parecido com isso mas por exemplo no meu caso eu tenho 2 tabelas uma para processo e outra para finalizados em meu sistema. E tipo eu preciso que depois de uma ação de clique eu ela muda para outra tabela(finalizados) a questão é que se eu usar o insert ae nesta ação para mudar para a outra tabela o que aconteceria é que quando eu fosse usar a função normal para inserir um dado em minha tabela(processos) ele ja enviaria para a segunda tabela sendo que eu só quero que isso aconteça depois de eu clicar no botão para finalizar. Se vc poder me ajudar fico grato.

  15. Lukas, certamente nao usaria este comando. Voce deve fazer atraves de dois comandos mesmo. Um insert e um delete. Ou ainda fazer atraves de um triggers. ;)

  16. Preciso inserir dados de uma tabela em outra, mais em um banco de dados diferente.

    tentei colocando o nome do banco.tabela mais nao funciona…

    cTxtSQL := ‘INSERT INTO `turnos.est_000500` (`Codigo`, `Cod_Barras`, `Grupo`, `SubGrupo`, `Descricao`, `inicio`, `Est_Pista`, `Est_Deposito`, `Custo`) ‘;
    cTxtSQL := cTxtSQL + ‘SELECT `Codigo`, `Cod_Barras`, `Grupo`, `SubGrupo`, `Descricao`, `Est_Pista`, `Est_Pista`, `Est_Deposito`, `Custo_Nota` FROM `estoque.produtos` ‘;

  17. Bom dia, preciso fazer algo semelhando Comando:
    INSERT INTO produtos (precovendai) SELECT precoven FROM prenota

    retorno do banco: [suporte] ERROR 1062: Entrada ” duplicada para a chave 2

    Como proceder??

  18. boa tarde,
    tenho uma tabela onde tenho dois codigos e dois locais de estoque:
    codigo filial local_estoq qtd
    00013 00 01 10
    00013 00 00 00
    00015 00 01 20
    00015 00 00 00

    sendo assim eu preciso copiar tudo que tiver o codigo igual colocar a quantidade igual.
    me ajudem não sem nem como começar. tenho conhecimento muinto fraco em mysql.

  19. Seguinte tua dica me ajudou muito, mas estou com um problema, tenho duas tabalas
    tabela1 com campos nome, emai
    tabela2 com campos nome, email, idsuser

    gostaria que esse id user fosse um campo que digitasse e não vem de outra tabela tipo

    INSERT INTO tabela2 (nome, email, iduser) SELECT nome, email FROM tabela1 WHERE (email LIKE ‘a%’) GROUP BY email

    somo eu iria inserir esse iduser sem ele está em outra tabela

  20. Ola

    Muito boa idéia

    Usei numa tabela para reorganizar o id que é autoincremental e tive que deletar algumas linhas e tava cheio de buraco

    Copiei os dados da tabela1 para a tabela2 menos o id que foi recriado sem buracos e depois delete tabela 1 e renomeiei tabela2 para tabela 1 e a performance

    Obrigado
    Marcos

  21. Estou usando o exemplo de insert com select, direto no banco funciona perfeitamente, mas quando executo no Delphi 2010 me retorna ‘Error creating cursor handle’.
    Tem mais alguma dica ?
    Obrigado

  22. Olá, poderia me dizer se tem como copiar uma tabela1 com nome, idade, data para tabela2 com nome, idade, data mas na tabela2 colocar uma nova data (no caso, no dia que os dados foram copiados)?
    Estou usando PHP.
    Agradeço antecipadamente.

  23. Ola Diogo, eu preciso atualizar a quantidade em estoque de um determinado banco de dados usando o codigo do produto correspondente, mas ele so pode atualizar a quantidade referente ao seu codigo do produto.

    cod produtoquant
    0000000100 | 150

  24. Diogo, eu estou desesperado atrás de uma solução para o seguinte problema:

    Eu tenho uma tabela no meu banco para o cadastro de funcionário e eu tenho que fazer o seguinte: toda vez que eu cadastrar esse funcionário, eu vou criar um login pra ele, ou seja, eu tenho duas tabelas, uma de cadastro de funcionário e outra para o cadastro de login e senha desse msm funcionário. O que eu quero fazer é o seguinte: toda vez que eu cadastrar o funcionário eu preciso resgatar o id desse funcionário pra poder colocar na tabela de login. O primeiro passo eu já fiz, que foi dar o foreign key de uma tabela pra outra. Agora eu quero saber como eu resgato esse id do novo funcionário cadastro. Vc pode me ajudar pelo amor de Deus.
    Obrigado!!

  25. Boa noite ..
    Tenho uma duvida.. Tenho 3 tabelas a SHowtimes , Movies e Cinemas… As tabelas movies e cinemas estao preenchidas e queria juntar o Id da tabela movies na tabela Showtimes no campo movie_ID e o mesmo nos cinemas so que muda o campo para cinemas_ID … Como faço esta engenhoca ?

  26. Boa noite,

    Estou começando a usar Delphi agora, tenho que fazer um programa de frete de caixa onde quando eu digitar uma letra deve inserir o produto refente na tabela item_de_venda e quando digito um numero deve ser a quantidade do produto.
    e apresentar em um dbgrid os produtos referente aquela venda.

    Estou tentando fazer isto a dias será que vc pode me ajudar,

    desde já agradeço

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.