2013-02-16 21 views
40

Chcę odczytać wszystkie dane z jednej tabeli i wstawić dane do innej tabeli. moje zapytanie jestwstawianie danych z jednej tabeli do drugiej w 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') 

ale mam błąd, który

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

proszę mi pomóc.

Odpowiedz

85

Można użyć INSERT...SELECT składnię. Zauważ, że możesz zacytować "1" bezpośrednio w części SELECT.

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

Spróbuj tego. Twoje postępowanie w niewłaściwy sposób.

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

To nie działa jako dodatkowi rodzice wokół wybranego nie działa. Zobacz dokumentację: http://dev.mysql.com/doc/refman/5.0/en/insert-select.html To INSERT INTO db (kolumny) WYBIERZ kolumny od tabeli WHERE blah = 1; – transformerTroy

5

To nie działa tak.

Podczas próby wstawienia wiersza za pomocą zapytania wszystkie wartości powinny znajdować się w zapytaniu.

Z powyższego problemu, który chcesz wstawić magazine_subscription_id, subscription_name, magazine_id, status w kwerendy wybierającej masz magazine_subscription_id, subscription_name, magazine_id, status 1 nie jest możliwe.

Jeśli chcesz wstawić albo trzeba wstawić przy użyciu kwerendy wartości bezpośrednich

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

To nie działa jako dodatkowi rodzice wokół wybranego nie działa. Zobacz dokumentację: http://dev.mysql.com/doc/refman/5.0/en/insert-select.html To INSERT INTO db (kolumny) WYBIERZ kolumny od tabeli 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; 

ale jest to złe MySQL

zrobić to zamiast:

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

co masz na myśli przez BAD MYSQL? i co, jeśli mamy już jakieś dane w: DESTINATION_TABLE? –

+2

Nie odpowiada to na pytanie o INSERT/SELECT z różną liczbą kolumn w obu tabelach ... – Marki555

+1

Osoba w pierwotnym pytaniu mogła mieć dane w tabeli docelowej. Upuszczenie stołu nie brzmi jak dobra ogólna odpowiedź z powodu tej możliwości. – chrisfs

3

Właściwie zapytań mysql do kopiowania danych z jednej tabeli do drugiej jest
Insert into table2_name (column_names) select column_name from table1
gdzie wartości skopiowane z Tabela1 do tabela2

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

Jeśli chcesz wstawić wszystkie dane z jednej tabeli do innej tabeli znajduje się w bardzo prosty sposób SQL

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

Myślę, że jest to najlepsza odpowiedź. –

+0

Niesamowite. Ale mam pytanie: dlaczego to działa? Co to 'select' wraca do' insert into'? –

1

Jeśli istnieje klucz podstawowy jak „id” trzeba je wykluczyć na przykład mój stół PHP: id, col2, Col3, Col4 kolumn. id jest klucz podstawowy, więc jeśli ten kod:

INSERT INTO php (SELECT * FROM php); 

pewnie ten błąd:

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

Więc tutaj jest rozwiązanie, to wykluczone "id" klucz:

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

Moja nowa tabela php zawiera już wszystkie wiersze tabeli php2.

Powiązane problemy