mysql :: inserire nella tabella, i dati da un'altra tabella?


187

Mi chiedevo se c'è un modo per farlo puramente in sql:

q1 = SELECT campaign_id, from_number, received_msg, date_received 
     FROM `received_txts` WHERE `campaign_id` = '8';
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)    
    VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received);

Nota: q1 restituirebbe circa 30.000 righe.

C'è un modo per fare ciò che sto tentando sopra in dritto sql? Per estrarre i dati direttamente da una tabella (sostanzialmente una tabella di dati grezzi) e inserirli in un'altra tabella (sostanzialmente una tabella di dati elaborati)?

Risposte:


401
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)  
SELECT campaign_id, from_number, received_msg, date_received
  FROM `received_txts`
 WHERE `campaign_id` = '8'

1
@InSane: 1) rispondi 2) correggi la formattazione della domanda. Non perdere l'ordine la prossima volta ;-)
zerkms,

ah ah :-) sì ... non sono mai riuscito a mettere in ordine le mie priorità! :-D
Jagmag

1
Lavorando! +1 Perfetto e molto veloce! Grazie compagno. Ho dovuto rimuovere le parentesi dai campi SELECT ...
Qualcuno il

@zerkms; I trigger funzioneranno con questa INSERT INTO ... SELECTaffermazione?
Hawcks

2
@haccks Credo lo stesso di un "normale"INSERT
zerkms

30

per l'intera riga

inserire in xyz selezionare * da xyz2 dove id = "1";

per la colonna selezionata

inserire in xyz (t_id, v_id, nome_f) selezionare t_id, v_id, nome_f da xyz2 dove id = "1";

1
L'approccio dell'intera riga ha esito negativo se esiste già un record con una chiave primaria corrispondente.
HotN,

Hai trovato una soluzione? <L'approccio di riga intera non riesce se esiste già un record con una chiave primaria corrispondente.>
Shivdhwaj Pandey

10

Risposta di zerkms è il metodo corretto. Ma, se qualcuno cerca di inserire più colonne extra nella tabella, puoi ottenerlo da quanto segue:

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`)
SELECT `campaign_id`, `from_number`, 'example@domain.xyz', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8'

Nella query sopra, ci sono 2 colonne extra denominate email & current_time .


2
E se volessi inserire tre righe di dati con gli stessi valori dalla selezione ma valori diversi per le colonne "aggiuntive" aggiunte come e-mail e current_time?
xxstevenxo,

4
INSERT INTO Table1 SELECT * FROM Table2

Questa è una risposta di qualità molto bassa. Inoltre, a differenza della risposta accettata, non prova nemmeno a mettere in relazione le informazioni incluse nella domanda.
Mike,

0
INSERT INTO preliminary_image (style_id,pre_image_status,file_extension,reviewer_id,
uploader_id,is_deleted,last_updated) 

SELECT '4827499',pre_image_status,file_extension,reviewer_id,
uploader_id,'0',last_updated FROM preliminary_image WHERE style_id=4827488

Analisi

Possiamo usare la query sopra se vogliamo copiare i dati da una tabella a un'altra tabella in mysql

  1. Qui la tabella di origine e di destinazione sono uguali, possiamo usare anche tabelle diverse.
  2. Poche colonne non stiamo copiando come style_id e is_deleted quindi le abbiamo selezionate da un'altra tabella
  3. La tabella che abbiamo usato nel sorgente contiene anche un campo di incremento automatico, quindi abbiamo lasciato quella colonna e questa viene inserita automaticamente con l'esecuzione della query.

Risultati dell'esecuzione

1 query eseguita, 1 riuscita, 0 errori, 0 avvisi

Query: inserire in preliminare_immagine (style_id, pre_image_status, file_extension, reviewer_id, uploader_id, is_deleted, last_updated) selezionare ...

5 righe interessate

Tempo di esecuzione: 0,385 sec Tempo di trasferimento: 0 sec Tempo totale: 0,386 sec

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.