inserați date dintr-un tabel în altul în mysql (Programare, Mysql, Insert)

Deepu Sankar a intrebat.

Vreau să citesc toate datele dintr-un tabel și să introduc unele date într-un alt tabel. interogarea mea este următoarea

  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')

dar am primit o eroare care

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

vă rog să mă ajutați.

10 răspunsuri
Gustav Bertram

Puteți utiliza INSERT…SELECT sintaxă. Rețineți că puteți cita ‘1’ direct în partea 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 

Comentarii

  • Este utilă și mi s-a părut destul de rapidă în adăugarea a 30k + rânduri, comparativ cu celelalte. Vă mulțumesc. –  > Por Jai.
  • ce se întâmplă dacă vreau să editez datele înainte de a le insera în cele noi? –  > Por John Demetriou.
  • @JohnDemetriou Puteți să transformați datele făcând ceva cu valorile din SELECT parte a declarației. De exemplu, subscription_name + '_old'. Dacă aveți ceva mai complex în minte, de ce nu puneți o nouă întrebare SO? –  > Por Gustav Bertram.
Ravi

Dacă doriți să inserați toate datele dintr-un tabel în alt tabel există un sql foarte simplu

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

Comentarii

  • Cred că acesta este cel mai bun răspuns –  > Por BARIS KURT.
  • Uimitor. Dar am o întrebare: de ce această lucrare? Ce înseamnă acest lucru? select revine la insert into ? –  > Por Alex.
  • @Gustav Bertram numărul de coloane pe care le selectezi din tabelul sursă și numărul de coloane din tabelul de destinație nu este același. În partea de inserare a SQL folosești patru coloane, iar în partea de selecție selectezi doar trei coloane . –  > Por Ravi.
  • Nu este util atunci când doriți să inserați valorile anumitor coloane –  > Por Kiran Joshi.
  • @KiranJoshi, în acest caz, menționați numele coloanelor în interogarea de selectare. –  > Por Ravi.
Praveen

Nu va funcționa așa.

Atunci când încercați să introduceți rândul folosind o interogare, toate valorile ar trebui să fie acolo în interogare.

În cazul problemei de mai sus, doriți să introducețimagazine_subscription_id, subscription_name, magazine_id, statusîn interogarea de selectare avețimagazine_subscription_id, subscription_name, magazine_id, status 1 nu este posibil.

Dacă doriți să introduceți oricare dintre ele, trebuie să introduceți utilizând interogarea valorilor directe.

BARIS KURT

Dacă există o cheie primară, cum ar fi „id”, trebuie să o excludeți, de exemplu, tabelul meu php are coloanele: id, col2,col3,col4. id este cheia primară, deci dacă execut acest cod:

INSERT INTO php  (SELECT * FROM php);

Probabil că voi primi această eroare:

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

Deci, iată soluția: am exclus cheia „id”:

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

Deci noul meu tabel php are toate rândurile din tabelul php2.

php

De fapt, interogarea mysql pentru a copia datele dintr-un tabel în altul este următoarea

Insert into table2_name (column_names) select column_name from table1

unde, valorile copiate din tabelul1 în tabelul2

Guryash Singh
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));

Amit Garg

Încercați acest lucru. Faceți în mod greșit.

    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)
    )

Comentarii

  • Acest lucru nu funcționează, deoarece părinții suplimentari din jurul selectului nu funcționează. Vă rugăm să consultați documentația: dev.mysql.com/doc/refman/5.0/en/insert-select.html Este vorba de INSERT INTO db (columns) SELECT columns FROM table WHERE blah = 1; –  > Por transformerTroy.
arvin_codeHunk
  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))

Comentarii

  • Acest lucru nu funcționează, deoarece părinții suplimentari din jurul selectului nu funcționează. Vă rugăm să consultați documentația: dev.mysql.com/doc/refman/5.0/en/insert-select.html Este vorba de INSERT INTO db (columns) SELECT columns FROM table WHERE blah = 1; -.  > Por transformerTroy.
Naveen Rai
INSERT INTO destination_table ( 
      Field_1, 
      Field_2, 
      Field_3) 
SELECT Field_1, 
      Field_2, 
      Field_3 
      FROM source_table;

DAR acesta este un BAD MYSQL

Faceți asta în schimb:

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

Comentarii

  • Ce vrei să spui prin BAD MYSQL? și Ce se întâmplă dacă avem deja niște date în DESTINATION_TABLE? –  > Por Adarsh Rajput.
  • Acest lucru nu răspunde la întrebarea despre INSERT/SELECT cu un număr diferit de coloane în ambele tabele… –  > Por Marki555.
  • Este posibil ca persoana din întrebarea inițială să fi avut date în tabelul de destinație. Renunțarea la un tabel nu pare a fi un răspuns bun pentru toate scopurile din cauza acestei posibilități. –  > Por chrisfs.
sudhanshu
INSERT INTO mt_magazine_subscription SELECT *
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC