2010-09-24 18 views
18

Ho due tabelle mysql che hanno entrambi un ID tipo in comune. Sono voler selezionare tutto da queste due tabelle con lo stesso typeid, domanda sotto:query di esportazione MySQL come istruzioni di inserimento

SELECT ta.requiredTypeID, ta.typeID, ta.quantity 
    FROM `invtypes` as t, `typeactivitymaterials` as ta 
    WHERE volume > 0 AND t.typeID = ta.typeID; 

Questo mi dà i risultati corretti, ma sto cercando di esportare questa query come istruzioni INSERT. Ho provato ad aggiungere INTO OUTFILE "/ percorso /" ma questo esporta solo i dati come dati delimitati da tabulazioni/virgole, è possibile esportare questi dati come istruzioni di inserimento?

Acclamazioni

Eef

risposta

11

È possibile combinare INSERT con SELECT per inserire i record direttamente dal risultato di una dichiarazione selezionata.

Il modo di fare che sarebbe qualcosa di simile:

INSERT INTO newtable (requiredTypeID, typeID, quantity) 
    SELECT ta.requiredTypeID, ta.typeID, ta.quantity 
     FROM `invtypes` as t, `typeactivitymaterials` as ta 
     WHERE volume > 0 AND t.typeID = ta.typeID; 

Ecco un link al relativo MySQL manual page.

Si noti che in questo modo si inserirà immediatamente l'inserto; non farebbe proprio quello che hai chiesto (che è quello di generare le istruzioni di inserimento da utilizzare in seguito).

+0

Che ha funzionato come un piacere, eccellente, evviva. – RailsSon

41

si potrebbe essere in grado di utilizzare mysqldump invece. Controlla i parametri --tables e --where=.

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

+2

Penso che sarebbe la risposta per la domanda iniziale chiesto. Ha funzionato magnificamente per me! – Nico

+2

Sì, e può essere molto più utile se le istanze sono su macchine diverse. –

4

Si può fare qualcosa di simile:

select 
     concat(
     concat(
      concat(
      concat(
       concat(
       concat('insert into <table> (requiredTypeID, typeID, quantity) values ("' 
         ,ta.requiredTypeID) 
       ,'", "') 
      ,ta.typeID) 
      ,'", "') 
     ,ta.quantity) 
     ,'")') 
FROM 
     `invtypes` as t, `typeactivitymaterials` as ta 
WHERE 
     volume > 0 AND t.typeID = ta.typeID; 
INTO OUTFILE 'file_name' 

So che è brutto, ma penso che risolve il caso :)

+2

scappa valori? –

+6

concat può richiedere più di due parametri. –

22

Se si dispone di MySQL Workbench, è possibile generare istruzioni di inserimento per l'utente.

Nell'editor SQL eseguire la query, quindi dal set di risultati è possibile fare clic sul pulsante di esportazione. Quindi in "Salva come tipo" selezionare come "istruzioni SQL INSERT (* .sql)". Fai clic su Salva, conferma la tabella che stai esportando e fai clic su OK.

Se si apre il file, è necessario visualizzare il set di risultati come istruzioni di inserimento con i nomi di colonna.

L'ho provato solo su una semplice selezione * dalla tabella. Non ho provato questo con più tabelle. Spero che aiuti.

EDIT: Sembra banco di lavoro è disponibile per Windows, OSX e Linux (Grazie vcardillo)

+1

Super pratico, grazie. Non ho nemmeno notato il menu a tendina per salvare come tipo. Grazie! – vcardillo

+1

Oh, anche MySQL Workbench esiste anche per OSX e Linux. – vcardillo

3

Basta lasciarlo qui, se qualcuno viene alla ricerca per la query esatta per la creazione di MySQLexport frase esatta insert dichiarazioni, si può utilizzare mysqldump come suggerito da @ a'r.

mysqldump -u<user-name> -p<password> mydb t1 t2 t3 > mydb_tables.sql 
Problemi correlati