2013-02-16 11 views
40

Ich möchte alle Daten aus einer Tabelle lesen und einige Daten in eine andere Tabelle einfügen. meine Frage istEinfügen von Daten aus einer Tabelle in eine andere in mysql

INSERT INTO mt_magazine_subscription ( 
     magazine_subscription_id, 
     subscription_name, 
     magazine_id, 
     status) 
    VALUES ( 
     (SELECT magazine_subscription_id, 
       subscription_name, 
       magazine_id 
     FROM tbl_magazine_subscription 
     ORDER BY magazine_subscription_id ASC), '1') 

, aber ich habe einen Fehler, dass

#1136 - Column count doesn't match value count at row 1 

mir bitte helfen.

Antwort

85

Sie können INSERT...SELECT Syntax mit Abfrage der direkten Werte einzufügen. Beachten Sie, dass Sie "1" direkt im SELECT-Teil zitieren können.

INSERT INTO mt_magazine_subscription ( 
     magazine_subscription_id, 
     subscription_name, 
     magazine_id, 
     status) 
SELECT magazine_subscription_id, 
     subscription_name, 
     magazine_id, 
     '1' 
FROM tbl_magazine_subscription 
ORDER BY magazine_subscription_id ASC 
0

Versuchen Sie dies. Du machst das falsch.

INSERT INTO mt_magazine_subscription( 
    magazine_subscription_id, 
    subscription_name, 
    magazine_id, status) VALUES ( 
     (SELECT magazine_subscription_id, subscription_name, 
       magazine_id,1 as status FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC) 
    ) 
+0

Dies funktioniert nicht, da die Extra-Eltern um die Auswahl nicht funktionieren. Bitte beachten Sie die Dokumentation: http://dev.mysql.com/doc/refman/5.0/en/insert-select.html Es ist INSERT INTO db (Spalten) SELECT Spalten FROM Tabelle WHERE blah = 1; – transformerTroy

5

Es wird nicht so funktionieren.

Wenn Sie versuchen, die Zeile mit einer Abfrage einzufügen, sollten alle Werte in der Abfrage vorhanden sein.

Mit dem obigen Problem, das Sie magazine_subscription_id, subscription_name, magazine_id, status in Auswahlabfrage Sie haben magazine_subscription_id, subscription_name, magazine_id, status 1 ist es nicht möglich, eingefügt werden sollen.

Wenn Sie einfügen möchten entweder müssen Sie

0
INSERT INTO mt_magazine_subscription ( 
     magazine_subscription_id, 
     subscription_name, 
     magazine_id, 
     status) 
    VALUES ( 
     (SELECT magazine_subscription_id, 
       subscription_name, 
       magazine_id,'1' as status 
     FROM tbl_magazine_subscription 
     ORDER BY magazine_subscription_id ASC)) 
+0

Dies funktioniert nicht, da die Extra-Eltern um die Auswahl nicht funktionieren. Bitte beachten Sie die Dokumentation: http://dev.mysql.com/doc/refman/5.0/en/insert-select.html Es ist INSERT INTO db (Spalten) SELECT Spalten FROM Tabelle WHERE blah = 1; – transformerTroy

-1
INSERT INTO destination_table ( 
     Field_1, 
     Field_2, 
     Field_3) 
SELECT Field_1, 
     Field_2, 
     Field_3 
     FROM source_table; 

aber dies ist ein BAD MYSQL

diese stattdessen tun:

  1. drop the destination table: DROP DESTINATION_TABLE;
  2. CREATE TABLE DESTINATION_TABLE AS (SELECT * FROM SOURCE_TABLE);
+3

was meinst du mit BAD MYSQL? Und wenn wir bereits Daten in DESTINATION_TABLE haben ?? –

+2

Dies beantwortet nicht die Frage über INSERT/SELECT mit unterschiedlicher Anzahl von Spalten in beiden Tabellen ... – Marki555

+1

Die Person in der ursprünglichen Frage möglicherweise Daten in der Zieltabelle. Einen Tisch fallen zu lassen, klingt aufgrund dieser Möglichkeit nicht wie eine gute Allzweck-Antwort. – chrisfs

3

die mysql-Abfrage für Kopieren von Daten von einem Tisch zum anderen Eigentlich ist
Insert into table2_name (column_names) select column_name from table1
wo die von table1 kopierten Werte
table2

-2
INSERT INTO mt_magazine_subscription SELECT * 
     FROM tbl_magazine_subscription 
     ORDER BY magazine_subscription_id ASC 
12

Wenn Sie alle Daten aus einer Tabelle in eine andere Tabelle einfügen möchten gibt es eine sehr einfach sQL

INSERT INTO destinationTable (SELECT * FROM sourceDbName.SourceTableName); 
+2

Ich denke, das ist die beste Antwort –

+0

Erstaunlich. Aber ich habe eine Frage: Warum diese Arbeit? Was dieser 'select' zu' insert' zurückführt? –

1

Wenn ein Primärschlüssel wie „id“ ist, dass Sie es zum Beispiel ausschließen haben meine php-Tabelle hat: id, col2, col3, col4 Spalten. id ist Primärschlüssel so, wenn ich diesen Code ausführen:

INSERT INTO php (SELECT * FROM php); 

ich wahrscheinlich diesen Fehler:

#1062 - Duplicate entry '1' for key 'PRIMARY'

So, hier ist die Lösung, ausgeschlossen I "id" Schlüssel:

INSERT INTO php (col2,col3,col4) (SELECT col2,col3,col4 FROM php2); 

Also meine neue php Tabelle hat alle php2 Tabellenzeilen mehr.

Verwandte Themen