Come copiare i dati da una tabella a un'altra nuova tabella in MySQL?


143

Voglio copiare i dati da una tabella all'altra in MySQL.

Tabella 1 (tabella esistente):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

Tabella 2 (nuova tabella)

st_id
uid
changed
status
assign_status

Voglio copiare alcuni campi di dati dalla TABELLA 1 alla TABELLA 2.

Questo può essere fatto usando le query MySQL?


1
È un lavoro una tantum o prevedi di farlo regolarmente?
jdias,

@@ jdias: fino ad ora è una volta lavoro ..
Fero

@jdias Per chiarire, se non è un lavoro una tantum, cosa dovrebbe fare invece un noob di MySQL?
Seanny123,

1
Probabilmente visualizzazioni per evitare la duplicazione dei dati.
James Bradbury,

Risposte:


280

Questo farà quello che vuoi:

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

Se si desidera includere tutte le righe da table1. Altrimenti puoi aggiungere un'istruzione WHERE alla fine se vuoi aggiungere solo un sottoinsieme di table1.

Spero che aiuti.


Fantastico, felice di vedere che è lo stesso di quello a cui sono stato abituato in T-SQL.
jpierson,

1
Un motivo in più per amare MySQL, molto intuitivo!
Peceps

Se si desidera copiare tutti i dati table1, è necessario creare un nuovo table2 prima di copiare @SANDEEP
Sachin da Pune il

77

Se non vuoi elencare i campi e la struttura delle tabelle è la stessa, puoi fare:

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

o se vuoi creare una nuova tabella con la stessa struttura:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

Riferimento per insert select ; Riferimento per la creazione della tabella di selezione


2
perché [AS]è AS
racchiuso

3
Indica che la parola è facoltativa. È scritto in questo modo perché ho copiato e incollato dai documenti; non aggiunge nulla. Penso che ASsia obbligatorio in altri dialetti SQL.
Bryan,

22

Puoi facilmente ottenere dati da un'altra tabella. Devi aggiungere campi solo quello che vuoi.

La query mysql è:

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


dove, i valori vengono copiati da table2 a table1


11
CREATE TABLE newTable LIKE oldTable;

Quindi, per copiare i dati

INSERT INTO newTable SELECT * FROM oldTable;



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

2
Sebbene questo codice possa rispondere alla domanda, sarebbe meglio spiegare come risolve il problema e perché utilizzarlo. Le risposte di solo codice non sono utili a lungo termine.
Tobias Liefke,

0

Puoi provare questo codice

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

0

la query sopra funziona solo se abbiamo creato una tabella client con colonne corrispondenti del cliente

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

0

Devi prima creare table2.

inserire nella tabella2 (campo1, campo2, ...)
seleziona field1, field2, ....
dalla tabella 1
dove condizione;

0

SE la tabella esiste. puoi provare a inserire in table_name selezionare * da old_tale;

SE la tabella non esiste. dovresti provare a creare la tabella table_name come old_table; inserire in table_name selezionare * da old_tale;

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.