2010-11-22 7 views
147

Je me demandais s'il y a une façon de le faire uniquement dans sql:mysql :: insérer dans la table, les données d'une autre table?

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); 

Note: q1 retournerait sur 30k lignes.

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

Répondre

307
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' 
+0

Parfait :) J'étais proche ... ish. Va accepter la réponse dès que possible – Hailwood

+1

+1 a été battu par seulement quelques secondes importantes :-) – InSane

+1

@InSane: 1) donner une réponse 2) corriger le formatage de la question. Ne manquez pas la commande la prochaine fois ;-) – zerkms

19

pour la ligne entière

insert into xyz select * from xyz2 where id="1";

pour la colonne sélectionnée

insert into xyz(t_id,v_id,f_name) select t_id,v_id,f_name from xyz2 where id="1";
+0

L'approche de ligne entière échoue s'il existe déjà un enregistrement avec une clé primaire correspondante. – HotN

-1

Vous pouvez le faire comme ci-dessous:

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' 
+6

N'est-ce pas exactement ce que zerkms a écrit il y a 5 ans (mis à part le 'autour des noms des colonnes et des tables)? – user276648

1
INSERT INTO Table1 SELECT * FROM Table2 
5

Répondu par zerkms est la bonne méthode. Mais, si quelqu'un cherche à insérer plus colonne supplémentaire dans la table, vous pouvez obtenir une des options suivantes:

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.

+1

Que se passe-t-il si je souhaite insérer trois lignes de données avec les mêmes valeurs à partir des valeurs select mais différentes pour les colonnes 'supplémentaires' ajoutées, telles que email et current_time? – xxstevenxo

Questions connexes