Wie kopiere ich Daten von einer Tabelle in eine andere neue Tabelle in MySQL?

143

Ich möchte in MySQL Daten von einer Tabelle in eine andere kopieren.

Tabelle 1 (vorhandene Tabelle):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

Tabelle 2 (Neue Tabelle)

st_id
uid
changed
status
assign_status

Ich möchte einige Datenfelder aus TABELLE 1 in TABELLE 2 kopieren.

Kann dies mit MySQL-Abfragen erfolgen?

Fero
quelle
1
Ist das ein einmaliger Job oder planen Sie ihn regelmäßig zu machen?
Jdias
@@ jdias: bis jetzt ist es einmalig job ..
Fero
@jdias Um zu verdeutlichen, was sollte ein MySQL-Noob tun, wenn es sich nicht um einen einmaligen Job handelt?
Seanny123
1
Wahrscheinlich Ansichten, um das Duplizieren von Daten zu vermeiden.
James Bradbury
Mögliches Duplikat von Daten in eine andere Tabelle kopieren
Marcus Vinicius Melo

Antworten:

280

Dies wird tun, was Sie wollen:

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

Wenn Sie alle Zeilen aus Tabelle1 einschließen möchten. Andernfalls können Sie am Ende eine WHERE-Anweisung hinzufügen, wenn Sie nur eine Teilmenge von table1 hinzufügen möchten.

Ich hoffe das hilft.

jdias
quelle
Großartig, ich bin froh zu sehen, dass dies das gleiche ist, wie ich es in T-SQL gewohnt bin.
Jpierson
1
Ein Grund mehr, MySQL zu lieben, sehr intuitiv!
Peceps
Wenn Sie alle Daten von Tabelle1 kopieren möchten, müssen Sie eine neue Tabelle2 erstellen, bevor Sie @SANDEEP
Sachin von Pune
77

Wenn Sie die Felder nicht auflisten möchten und die Struktur der Tabellen identisch ist, können Sie Folgendes tun:

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

oder wenn Sie eine neue Tabelle mit derselben Struktur erstellen möchten:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

Referenz für Insert Select ; Referenz zum Erstellen einer Tabellenauswahl

Bryan
quelle
2
Warum [AS]ist in eckigen Klammern, was wird AShier gemacht
Kasun Siyambalapitiya
3
Es bedeutet, dass das Wort optional ist. Es ist so geschrieben, weil ich es aus den Dokumenten kopiert und eingefügt habe. es fügt nichts hinzu. Ich denke, das ASist in anderen SQL-Dialekten obligatorisch.
Bryan
22

Sie können problemlos Daten aus einer anderen Tabelle abrufen. Sie müssen nur Felder hinzufügen, die Sie möchten.

Die MySQL-Abfrage lautet:

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


Dabei werden die Werte von Tabelle2 nach Tabelle1 kopiert

php
quelle
11
CREATE TABLE newTable LIKE oldTable;

Dann kopieren Sie die Daten über

INSERT INTO newTable SELECT * FROM oldTable;
Seymur Asadov
quelle
2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>]
Nana Partykar
quelle
2
Während dieser Code die Frage beantworten kann, ist es besser zu erklären, wie er das Problem löst und warum er verwendet wird. Nur-Code-Antworten sind auf lange Sicht nicht sinnvoll.
Tobias Liefke
0

Sie können diesen Code ausprobieren

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

Die obige Abfrage funktioniert nur, wenn wir eine Client-Tabelle mit übereinstimmenden Spalten des Kunden erstellt haben

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

Sie sollten zuerst table2 erstellen.

in Tabelle2 einfügen (Feld1, Feld2, ...)
Wählen Sie Feld1, Feld2, ....
aus Tabelle1
wo Bedingung;
Sriyashree Swain
quelle
0

WENN die Tabelle existiert. Sie können versuchen, in table_name einzufügen. select * from old_tale;

WENN die Tabelle nicht existiert. Sie sollten versuchen, die Tabelle table_name wie old_table zu erstellen. in tabellenname einfügen select * from old_tale;

Jac Tian
quelle