2010-09-24 7 views
18

Tengo dos tablas mysql que tienen un typeID en común. Estoy deseando para seleccionar todo, desde estas dos tablas con el mismo TypeId, consulta siguiente:Consulta de exportación MySQL como instrucciones de inserción

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

Esto me da los resultados correctos, pero estoy tratando de exportar esta consulta como instrucciones de inserción. He intentado agregar INTO OUTFILE "/ ruta /" pero esto solo exporta los datos como datos tabulados/comas, ¿es posible exportar estos datos como instrucciones de inserción?

Saludos

Eef

Respuesta

11

Se pueden combinar con SELECT INSERT para insertar registros directamente del resultado de una declaración seleccionada.

La forma de hacerlo sería algo como esto:

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; 

Aquí hay un enlace a la correspondiente MySQL manual page.

Tenga en cuenta que esto realmente haría la inserción de inmediato; no haría exactamente lo que usted pidió (que es generar las instrucciones de inserción para usar más adelante).

+0

Eso funcionó como un regalo, excelente, salud. – RailsSon

41

Usted puede ser capaz de utilizar mysqldump lugar. Consulte los parámetros --tables y --where=.

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

+2

creo que sería la respuesta para la pregunta original se le preguntó. ¡Funcionó maravillosamente para mí! – Nico

+2

Sí, y puede ser mucho más útil si las instancias están en máquinas diferentes. –

4

Usted puede hacer algo como esto:

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' 

Sé que es feo, pero creo que los que resuelve su caso :)

+2

¿lo hace escapar de los valores? –

+6

concat puede tomar más de dos parámetros. –

22

Si tiene MySQL Workbench, puede generar instrucciones de inserción para usted.

En el editor SQL, ejecute su consulta, luego, desde el conjunto de resultados, puede hacer clic en el botón exportar. Luego, en "Guardar como tipo", seleccione como "SQL INSERT declaraciones (* .sql)". Haga clic en Guardar, confirme la tabla que está exportando y haga clic en Aceptar.

Si abre el archivo, debería ver su conjunto de resultados como instrucciones de inserción con los nombres de las columnas.

Solo lo probé en una simple selección * de la tabla. No he probado esto con múltiples tablas. Espero que esto ayude.

EDIT: Parece que la mesa de trabajo está disponible para Windows, OS X, y Linux (Gracias vcardillo)

+1

Súper útil, gracias. Ni siquiera noté el menú desplegable para guardar como tipo. ¡Gracias! – vcardillo

+1

Ah, también, MySQL Workbench existe también para OSX y Linux. – vcardillo

3

acaba de salir de aquí, si alguien viene buscando la consulta exacta para la creación de MySQLexport consulta como insert declaraciones, puede use mysqldump como se sugirió @ a'r.

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