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?


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

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.


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


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


11
CREATE TABLE newTable LIKE oldTable;

Ensuite, pour copier les données

INSERT INTO newTable SELECT * FROM oldTable;



2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>]

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

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

0

Vous devez d'abord créer table2.

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

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;

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.