Pytanie wstaw dane z jednej tabeli do drugiej w mysql


chcę odczytać wszystkie dane z jednej tabeli i wstawić dane do innej tabeli. moje zapytanie jest

  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ę pomóż mi.


44
2018-02-16 07:00


pochodzenie




Odpowiedzi:


Możesz użyć WSTAW ... WYBIERZ składnia. 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 

91
2018-02-16 07:09



Jego pomocna i znalazłem to dość szybko w dodawaniu 30k + wiersze w porównaniu do innych. Dziękuję Ci. - Jai


Jeśli chcesz wstawić wszystkie dane z jednej tabeli do innej tabeli, istnieje bardzo prosty sql

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

13
2017-10-15 07:17



Myślę, że to najlepsza odpowiedź - BARIS KURT
Niesamowity. Ale mam pytanie: dlaczego to działa? Co to select wraca do insert into ? - Marcelo Rafael
@Gustav Bertram liczba kolumn wybieranych z tabeli źródłowej i liczba kolumn w tabeli docelowej nie jest taka sama. W części wstawiania SQL używasz czterech kolumn, aw części wyboru wybierasz tylko trzy kolumny. - Ravi


To nie działa tak.

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

W powyższym problemie chcesz wstawić magazine_subscription_id, subscription_name, magazine_id, status w wybranym zapytaniu magazine_subscription_id, subscription_name, magazine_id, status 1 nie jest możliwe.

Jeśli chcesz wstawić, musisz wstawić za pomocą zapytania bezpośrednich wartości


5
2018-02-16 07:07





Właściwie zapytanie 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 tabeli1 do tabeli2


3
2017-12-26 11:41





Jeśli istnieje klucz podstawowy, taki jak "id", musisz go wykluczyć, na przykład moja tabela php ma kolumny: id, col2, col3, col4. id to klucz podstawowy, więc jeśli uruchomię ten kod:

INSERT INTO php  (SELECT * FROM php);

Prawdopodobnie pojawia się ten błąd:

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

Oto rozwiązanie, wyłączyłem klucz "id":

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

Tak więc moja nowa tabela php ma już wszystkie wiersze tabeli php2.


1
2017-12-25 23:03





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
2018-02-16 07:05



To nie działa tak, jak dodatkowych rodziców wokół wybranego nie działa. Zobacz dokumentację: dev.mysql.com/doc/refman/5.0/en/insert-select.html  To INSERT INTO db (kolumny) WYBIERZ kolumny od tabeli WHERE bla = 1; - transformerTroy


  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
2018-02-16 07:10



To nie działa tak, jak dodatkowych rodziców wokół wybranego nie działa. Zobacz dokumentację: dev.mysql.com/doc/refman/5.0/en/insert-select.html  To INSERT INTO db (kolumny) WYBIERZ kolumny od tabeli WHERE bla = 1; - transformerTroy


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

ALE to jest BAD MYSQL

Zrób to zamiast tego:

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

-1
2017-09-23 18:47



co masz na myśli przez BAD MYSQL? i co, jeśli mamy już jakieś dane w: DESTINATION_TABLE? - Adarsh Rajput
To nie odpowiada na pytanie o INSERT / SELECT z różną liczbą kolumn w obu tabelach ... - Marki555
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


INSERT INTO mt_magazine_subscription SELECT *
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC

-2
2017-12-12 09:49