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?


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

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.


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


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


11
CREATE TABLE newTable LIKE oldTable;

Dann kopieren Sie die Daten über

INSERT INTO newTable SELECT * FROM oldTable;



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

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

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

0

Sie sollten zuerst table2 erstellen.

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

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;

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.