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:
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"