web-dev-qa-db-fra.com

Requête d'exportation MySQL en tant qu'instructions d'insertion

J'ai deux tables mysql qui ont toutes deux un typeID en commun. Je veux tout sélectionner dans ces deux tables avec le même typeID, requête ci-dessous:

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

Cela me donne les résultats corrects mais j'essaie d'exporter cette requête en tant qu'instructions d'insertion. J'ai essayé d'ajouter INTO OUTFILE "/ path /" mais cela exporte uniquement les données en tant que données séparées par des tabulations/virgules, est-il possible d'exporter ces données en tant qu'instructions d'insertion?

À votre santé

Eef

22
RailsSon

Vous pouvez combiner INSERT avec SELECT pour insérer des enregistrements directement à partir du résultat d'une instruction select.

La façon dont vous le faites serait quelque chose comme ceci:

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;

Voici un lien vers la --- page de manuel MySQL .

Notez que cela ferait en fait l'insertion tout de suite; il ne ferait pas exactement ce que vous demandiez (qui est de générer les instructions d'insertion pour une utilisation ultérieure).

14
Spudley

Vous pourrez peut-être utiliser mysqldump à la place. Consultez les paramètres --tables et --where=.

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

45
a'r

Si vous avez MySQL Workbench, il peut générer des instructions d'insertion pour vous.

Dans l'éditeur SQL, exécutez votre requête, puis à partir du jeu de résultats, vous pouvez cliquer sur le bouton d'exportation. Ensuite, dans le "Enregistrer en tant que type", sélectionnez "Instructions SQL INSERT (* .sql)". Cliquez sur Enregistrer, confirmez la table que vous exportez et cliquez sur OK.

Si vous ouvrez le fichier, vous devriez voir votre jeu de résultats sous forme d'instructions d'insertion avec les noms de colonne.

Je n'ai testé cela que sur une simple sélection * du tableau. Je n'ai pas testé cela avec plusieurs tables. J'espère que ça aide.

EDIT: On dirait que Workbench est disponible pour Windows, OSX et Linux (merci vcardillo)

32
Yodacheese

Laissez-le ici, si quelqu'un cherche la requête exacte pour créer une requête MySQLexport en tant qu'instructions insert. Cette réponse utilise mysqldump comme suggestion @ a'r.

mysqldump -u<user-name> -p<password> mydb t1 t2 t3 > mydb_tables.sql
10
Anil Bhaskar

Vous pouvez faire quelque chose comme ça:

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'  

Je sais que c'est moche mais je pense que ça résout ton cas :)

4
CristiC