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?


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

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.


Ó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


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


11
CREATE TABLE newTable LIKE oldTable;

Em seguida, para copiar os dados

INSERT INTO newTable SELECT * FROM oldTable;



2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>]

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

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

0

Você deve criar table2 primeiro.

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

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;

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.