Como copiar dados de uma tabela para outra nova tabela no MySQL?

143

Eu quero copiar dados de uma tabela para outra no MySQL.

Tabela 1 (tabela existente):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

Tabela 2 (nova tabela)

st_id
uid
changed
status
assign_status

Quero copiar alguns campos de dados da Tabela 1 para a Tabela 2.

Isso pode ser feito usando consultas MySQL?

Fero
fonte
1
Este é um trabalho único ou você planeja fazê-lo regularmente?
jdias
@@ jdias: até agora é uma vez trabalho ..
Fero
@jdias Para esclarecer, se não é um trabalho único, o que um noob do MySQL deve procurar fazer?
Seanny123
1
Provavelmente visualizações para evitar a duplicação de dados.
precisa
Possível duplicata de Copiar dados em outra tabela #
Marcus Vinicius Melo

Respostas:

280

Isso fará o que você deseja:

INSERT INTO table2 (st_id,uid,changed,status,assign_status)
SELECT st_id,from_uid,now(),'Pending','Assigned'
FROM table1

Se você deseja incluir todas as linhas da tabela1. Caso contrário, você poderá adicionar uma instrução WHERE ao final se desejar adicionar apenas um subconjunto da tabela1.

Eu espero que isso ajude.

jdias
fonte
Ótimo, fico feliz em ver que isso é igual ao que eu estou acostumado no T-SQL.
jpierson
1
Mais uma razão para amar o MySQL, muito intuitivo!
peceps
Se quiser copiar todos os dados tabela1, em seguida, você deve criar nova table2 antes cópia @SANDEEP
Sachin de Pune
77

Se você não deseja listar os campos e a estrutura das tabelas é a mesma, você pode:

INSERT INTO `table2` SELECT * FROM `table1`;

ou se você deseja criar uma nova tabela com a mesma estrutura:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

Referência para inserção de seleção ; Referência para seleção de tabela de criação

Bryan
fonte
2
por que [AS]está entre colchetes, o que é feito por ASaqui
Kasun Siyambalapitiya
3
Denota que a palavra é opcional. Está escrito assim porque copiei e colei os documentos; não adiciona nada. Eu acho que ASé obrigatório em outros dialetos SQL.
Bryan
22

Você pode facilmente obter dados de outra tabela. Você precisa adicionar os campos que quiser.

A consulta mysql é:

INSERT INTO table_name1(fields you want)
  SELECT fields you want FROM table_name2


onde, os valores são copiados da tabela2 para a tabela1

php
fonte
11
CREATE TABLE newTable LIKE oldTable;

Em seguida, para copiar os dados

INSERT INTO newTable SELECT * FROM oldTable;
Seymur Asadov
fonte
2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>]
Nana Partykar
fonte
2
Embora esse código possa responder à pergunta, seria melhor explicar como ele resolve o problema e por que usá-lo. Respostas somente de código não são úteis a longo prazo.
Tobias Liefke
0

Você pode tentar este código

insert into #temp 
select Product_ID,Max(Grand_Total) AS 'Sales_Amt', Max(Rec_Amount) ,'',''
from Table_Name group by Id
Biddut
fonte
0

a consulta acima só funcionará se tivermos criado uma tabela de clientes com colunas correspondentes do cliente

INSERT INTO clients(c_id,name,address)SELECT c_id,name,address FROM customer
Qanuni
fonte
0

Você deve criar table2 primeiro.

inserir na tabela2 (campo1, campo2, ...)
selecione campo1, campo2, ....
da tabela1
onde condição;
Sriyashree Swain
fonte
0

Se a tabela existir. você pode tentar inserir no table_name selecione * from old_tale;

Se a tabela não existir. você deve tentar criar a tabela table_name como old_table; inserir no nome_tabela selecione * do conto antigo;

Jac Tian
fonte