MySQL: come copiare le righe, ma modificare alcuni campi?

Ho un gran numero di righe che vorrei copiare, ma ho bisogno di cambiare un campo.

Posso selezionare le righe che voglio copiare:

select * from Table where Event_ID = "120" 

Ora voglio copiare tutte quelle righe e creare nuove righe mentre imposta Event_ID su 155 . Come posso realizzare questo?

 INSERT INTO Table ( Event_ID , col2 ... ) SELECT "155" , col2 ... FROM Table WHERE Event_ID = "120" 

Qui, il col2, … rappresentano le colonne rimanenti (quelle diverse da Event_ID) nella tabella.

Questa è una soluzione in cui hai molti campi nella tua tabella e non vuoi ottenere un crampo da digitare tutti i campi, basta digitare quelli necessari 🙂

Come copiare alcune righe nella stessa tabella, con alcuni campi con valori diversi:

  1. Crea una tabella temporanea con tutte le righe che vuoi copiare
  2. Aggiorna tutte le righe nella tabella temporanea con i valori desiderati
  3. Se si dispone di un campo di incremento automatico, è necessario impostarlo su NULL nella tabella temporanea
  4. Copia tutte le righe della tabella temporanea nella tabella originale
  5. Elimina la tabella temporanea

Il tuo codice:

 CREATE table temporary_table AS SELECT * FROM original_table WHERE Event_ID="155"; UPDATE temporary_table SET Event_ID="120"; UPDATE temporary_table SET ID=NULL INSERT INTO original_table SELECT * FROM temporary_table; DROP TABLE temporary_table 

Codice di scenario generale:

 CREATE table temporary_table AS SELECT * FROM original_table WHERE ; UPDATE temporary_table SET =, =, ...; UPDATE temporary_table SET =NULL; INSERT INTO original_table SELECT * FROM temporary_table; DROP TABLE temporary_table 

Codice semplificato / condensato:

 CREATE TEMPORARY TABLE temporary_table AS SELECT * FROM original_table WHERE ; UPDATE temporary_table SET =NULL, =, =, ...; INSERT INTO original_table SELECT * FROM temporary_table; 

Poiché la creazione della tabella temporanea utilizza la parola chiave TEMPORARY , verrà eliminata automaticamente al termine della sessione (come suggerito da @ ar34z).

Supponiamo che il tuo tavolo abbia altre due colonne: foo e bar

 INSERT INTO Table (foo, bar, Event_ID) SELECT foo, bar, "155" FROM Table WHERE Event_ID = "120" 

Se hai un sacco di colonne nella tua tabella e non vuoi scriverle tutte, puoi farlo usando una tabella temporanea, come;

 SELECT * INTO #Temp FROM Table WHERE Event_ID = "120" GO UPDATE #TEMP SET Column = "Changed" GO INSERT INTO Table SELECT * FROM #Temp 

Ehi, che ne dici di copiare tutti i campi, cambiarne uno con lo stesso valore + qualcos’altro.

 INSERT INTO Table (foo, bar, Event_ID) SELECT foo, bar, Event_ID+"155" FROM Table WHERE Event_ID = "120" 

??????????

Finché Event_ID è intero, fai questo:

 INSERT INTO Table (foo, bar, Event_ID) SELECT foo, bar, (Event_ID + 155) FROM Table WHERE Event_ID = "120"