Comment copier des données d'une table vers une autre nouvelle table dans MySQL?

143

Je souhaite copier des données d'une table à une autre dans MySQL.

Tableau 1 (tableau existant):

aid    
st_id
from_uid
to_gid
to_uid
created
changed
subject
message
link

Tableau 2 (nouveau tableau)

st_id
uid
changed
status
assign_status

Je souhaite copier certains champs de données du TABLEAU 1 dans le TABLEAU 2.

Cela peut-il être fait à l'aide de requêtes MySQL?

Fero
la source
1
Est-ce un travail ponctuel ou prévoyez-vous de le faire régulièrement?
jdias
@@ jdias: jusqu'à présent, c'est un travail ponctuel ..
Fero
@jdias Pour clarifier, si ce n'est pas un travail ponctuel, que devrait plutôt faire un noob MySQL?
Seanny123
1
Vues probablement pour éviter la duplication des données.
James Bradbury
Copie
Marcus Vinicius Melo

Réponses:

280

Cela fera ce que vous voulez:

INSERT INTO table2 (st_id,uid,changed,status,assign_status)
SELECT st_id,from_uid,now(),'Pending','Assigned'
FROM table1

Si vous souhaitez inclure toutes les lignes de table1. Sinon, vous pouvez ajouter une instruction WHERE à la fin si vous souhaitez ajouter uniquement un sous-ensemble de table1.

J'espère que ça aide.

jdias
la source
Super, heureux de voir que c'est la même chose que ce à quoi j'ai été habitué dans T-SQL.
jpierson
1
Une raison de plus pour aimer MySQL, très intuitif!
peceps
Si vous souhaitez copier toutes les données de table1, vous devez créer une nouvelle table2 avant de copier @SANDEEP
Sachin de Pune
77

Si vous ne souhaitez pas lister les champs et que la structure des tables est la même, vous pouvez faire:

INSERT INTO `table2` SELECT * FROM `table1`;

ou si vous souhaitez créer une nouvelle table avec la même structure:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;

Référence pour la sélection d'insert ; Référence pour créer une table sélectionnez

Bryan
la source
2
pourquoi [AS]est entre crochets, que fait-on ASici
Kasun Siyambalapitiya
3
Cela signifie que le mot est facultatif. Il est écrit de cette façon parce que j'ai copié et collé à partir des documents; cela n'ajoute rien. Je pense que le ASest obligatoire dans d'autres dialectes SQL.
Bryan
22

Vous pouvez facilement obtenir des données d'une autre table. Vous devez ajouter les champs que vous voulez.

La requête mysql est:

INSERT INTO table_name1(fields you want)
  SELECT fields you want FROM table_name2


où, les valeurs sont copiées de table2 vers table1

php
la source
11
CREATE TABLE newTable LIKE oldTable;

Ensuite, pour copier les données

INSERT INTO newTable SELECT * FROM oldTable;
Seymur Asadov
la source
2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>]
Nana Partykar
la source
2
Bien que ce code puisse répondre à la question, il serait préférable d'expliquer comment il résout le problème et pourquoi l'utiliser. Les réponses basées uniquement sur le code ne sont pas utiles à long terme.
Tobias Liefke
0

Vous pouvez essayer ce code

insert into #temp 
select Product_ID,Max(Grand_Total) AS 'Sales_Amt', Max(Rec_Amount) ,'',''
from Table_Name group by Id
Biddut
la source
0

la requête ci-dessus ne fonctionne que si nous avons créé une table clients avec des colonnes correspondantes du client

INSERT INTO clients(c_id,name,address)SELECT c_id,name,address FROM customer
Qanuni
la source
0

Vous devez d'abord créer table2.

insérer dans la table2 (champ1, champ2, ...)
sélectionnez champ1, champ2, ....
de table1
où condition;
Sriyashree Swain
la source
0

SI la table existe. vous pouvez essayer d'insérer dans table_name select * from old_tale;

SI la table n'existe pas. vous devriez essayer de créer une table nom_table comme old_table; insérer dans table_name select * from old_tale;

Jac Tian
la source