Antworten:
INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;
BEARBEITEN: oder wenn die Tabellen unterschiedliche Strukturen haben, können Sie auch:
INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;
EDIT: um dies einzuschränken ..
INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1
Wenn die Tabelle nicht vorhanden ist, können Sie eine Tabelle mit demselben Schema wie folgt erstellen:
CREATE TABLE table2 LIKE table1;
So kopieren Sie die Daten:
INSERT INTO table2 SELECT * FROM table1
SELECT * INTO newTable FROM sourceTable
in w3school gefunden , warum er nicht funktioniertMySQL
SELECT ... INTO
soll eine Tabelle in eine Ausgabedatei oder in Variablen exportieren. nicht direkt in einen Tisch. Siehe dev.mysql.com/doc/refman/5.7/en/select-into.html
Wenn table1 groß ist und Sie es nicht für die Dauer des Kopiervorgangs sperren möchten, können Sie stattdessen ein Dump-and-Load durchführen:
CREATE TABLE table2 LIKE table1;
SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;
show processlist
ich beim Überprüfen keine laufende Abfrage sehen. Ich bin mir nicht sicher, worum es geht.
Wenn Sie den Inhalt in einer einzigen Aufnahme erstellen und kopieren möchten, verwenden Sie einfach SELECT:
CREATE TABLE new_tbl SELECT * FROM orig_tbl;
Das hat bei mir funktioniert. Sie können die SELECT-Anweisung mit den WHERE- und LIMIT-Klauseln komplexer gestalten.
Duplizieren Sie zuerst Ihre große Tabelle (ohne die Daten), führen Sie die folgende Abfrage aus und schneiden Sie dann die größere Tabelle ab.
INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)
Super einfach. :-)
Versuche dies. Funktioniert gut in meinem Oracle 10g,
CREATE TABLE new_table
AS (SELECT * FROM old_table);