2013-03-27 20 views
9

Ho una tabella con 158 colonne e 22.000 righe e ho un'altra tabella vuota in cui voglio inserire valori dinamici in base alla condizione WHERE proveniente dall'utente. La query SELECT sarà simile a questo:Copia righe da una tabella a un'altra utilizzando la query INSERT

SELECT * FROM WHERE mygrist_tables suic_att> = 5 E sesso = 'M'

Questo mi dà circa 9.000 record indietro (diciamo). Voglio inserire questi record in un'altra tabella (solo questi dati filtrati). È possibile? Qualcuno potrebbe darmi un'idea di come dovrebbe apparire la query INSERT e se devo creare un'altra tabella con tutte quelle 158 cloumn o la query INSERT potrebbe creare dinamicamente tutte quelle 158 colonne? Inoltre, potrei farlo usando una vista o sarebbe un tavolo essenziale? Grazie in anticipo!

+0

INSERT INTO ... SELECT ... –

+0

Potrebbe darmi una query come ad esempio per favore? –

+2

No, penso che potresti farcela. –

risposta

20

Sembra che si desideri eseguire la precedente istruzione SELECT e INSERT in una nuova tabella che non esiste. Se è così, questo dovrebbe funzionare:

SELECT * INTO YourNewTable 
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M' 

Supponendo YourNewTable esisteva già, allora avresti bisogno di eseguire INSERT INTO:

INSERT INTO YourNewTable 
SELECT * 
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M' 

Opzionalmente potrebbe essere necessario specificare le colonne in essi non sono la stessa cosa .

EDIT - Rileggendo i commenti e realizzare DB è MySQL, per creare una nuova tabella da un'istruzione SQL, è necessario utilizzare:

CREATE TABLE YourNewTable 
SELECT * 
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M'; 

http://dev.mysql.com/doc/refman/5.0/en/create-table.html

+0

In realtà, ho solo una colonna P_ID nella nuova tabella e non è presente nella vecchia tabella. Come posso aggiornare questa query? Perché ottengo questo errore quando provo a eseguire la query: Codice di errore: 1136. Il conteggio delle colonne non corrisponde al conteggio dei valori alla riga 1 –

+0

@SharadhaJayaraman - INSERISCI IN YourNewTable (Col1, Col2, ecc.) SELEZIONA Col1, Col2, ecc. DA ... - Devi specificare i nomi delle colonne in quel caso, sfortunatamente ... Buona fortuna. – sgeddes

+0

Tutte le 158 colonne? :( –

3

È possibile utilizzare il SELECT INTO sintassi

SELECT * 
INTO MyNewTable 
FROM mygrist_tables WHERE suic_att>=5 AND gender='M' 

Ma non sarai in grado di inserire in una tabella che esiste già in quel modo. Se la tabella esiste già, si può usare

INSERT INTO MyOldTable 
([LIST OUT YOUR COLUMNS HERE]) 
SELECT [LIST OUT YOUR COLUMNS HERE] 
FROM mygrist_tables WHERE suic_att>=5 AND gender='M' 
+1

Come posso codificare tutte le 158 colonne in [LIST OUT YOUR COLUMNS HERE]? Non c'è un modo migliore per farlo? –

+0

Quello che intendevo era quello che @sgeddes menzionava nella sua risposta ... Dovresti elencare le colonne se la tabella che stai selezionando differisce dalla tabella in cui stai inserendo. Se sono uguali, puoi usare * – rbedger

+0

Che fa schifo. Sono in una situazione simile, in cui digitare manualmente 50 diversi nomi di colonne sembra essere un'aspettativa stupida di MySQL. Suppongo che l'alter tool di percona sia l'unica cosa che abbia senso in questo mondo. – skrilled