mysql :: insert dans la table, les données d'une autre table?

190

Je me demandais s'il existe un moyen de le faire uniquement en SQL:

q1 = SELECT campaign_id, from_number, received_msg, date_received 
     FROM `received_txts` WHERE `campaign_id` = '8';
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)    
    VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received);

Remarque: q1 renverrait environ 30 000 lignes.

Existe-t-il un moyen de faire ce que je tente ci-dessus en sql droit? Pour simplement extraire les données directement d'une table (essentiellement une table de données brutes) et les insérer dans une autre table (essentiellement une table de données traitées)?

Hailwood
la source

Réponses:

409
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)  
SELECT campaign_id, from_number, received_msg, date_received
  FROM `received_txts`
 WHERE `campaign_id` = '8'
zerkms
la source
1
@InSane: 1) donner une réponse 2) corriger la mise en forme de la question. Ne manquez pas la commande la prochaine fois ;-)
zerkms
ha ha :-) yup..je n'ai jamais réussi à faire trier mes priorités! :-D
Jagmag
1
Travail! +1 Parfait et très rapide! Merci mon pote. Juste eu à supprimer les crochets des champs SELECT ...
Quelqu'un
@zerkms; Les déclencheurs fonctionneront-ils avec cette INSERT INTO ... SELECTinstruction?
haccks le
2
@haccks Je crois la même chose que si c'était juste un "normal"INSERT
zerkms
32

pour toute la ligne

insérer dans xyz sélectionner * à partir de xyz2 où id = "1";

pour la colonne sélectionnée

insérer dans xyz (t_id, v_id, f_name) sélectionnez t_id, v_id, f_name de xyz2 où id = "1";
Lokesh Deshmukh
la source
1
L'approche de la ligne entière échoue s'il existe déjà un enregistrement existant avec une clé primaire correspondante.
HotN
Avez-vous trouvé une solution? <L'approche de la ligne entière échoue s'il existe déjà un enregistrement existant avec une clé primaire correspondante.>
Shivdhwaj Pandey
10

Répondu par zerkms est la bonne méthode. Mais, si quelqu'un cherche à insérer plus de colonnes supplémentaires dans le tableau, vous pouvez l'obtenir à partir de ce qui suit:

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`)
SELECT `campaign_id`, `from_number`, '[email protected]', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8'

Dans la requête ci-dessus, il y a 2 colonnes supplémentaires nommées email & current_time .

IamMHussain
la source
2
Que faire si je voulais insérer trois lignes de données avec les mêmes valeurs de la sélection mais des valeurs différentes pour les colonnes «supplémentaires» ajoutées telles que email et current_time?
xxstevenxo
4
INSERT INTO Table1 SELECT * FROM Table2
Mher Arsh
la source
C'est une réponse de très mauvaise qualité. De plus, contrairement à la réponse acceptée, elle n'essaie même pas de se rapporter aux informations incluses dans la question.
Mike le
0
INSERT INTO preliminary_image (style_id,pre_image_status,file_extension,reviewer_id,
uploader_id,is_deleted,last_updated) 

SELECT '4827499',pre_image_status,file_extension,reviewer_id,
uploader_id,'0',last_updated FROM preliminary_image WHERE style_id=4827488

Une analyse

Nous pouvons utiliser la requête ci-dessus si nous voulons copier des données d'une table vers une autre table dans mysql

  1. Ici, la table source et la table de destination sont les mêmes, nous pouvons également utiliser des tables différentes.
  2. Quelques colonnes que nous ne copions pas comme style_id et is_deleted , nous les avons donc sélectionnées codées en dur à partir d'une autre table
  3. La table que nous avons utilisée dans la source contient également un champ d'incrémentation automatique, nous avons donc laissé cette colonne et elle est insérée automatiquement avec l'exécution de la requête.

Résultats d'exécution

1 requêtes exécutées, 1 succès, 0 erreur, 0 avertissement

Requête: insérer dans preliminaire_image (style_id, pre_image_status, file_extension, reviewer_id, uploader_id, is_deleted, last_updated) select ...

5 ligne (s) affectée (s)

Temps d'exécution: 0,385 sec Temps de transfert: 0 sec Temps total: 0,386 sec

Amit Jain
la source