88 votes

Comment puis-je fusionner deux tables MySql?

Comment puis-je fusionner deux tables MySql qui ont la même structure? Les clés primaires des deux tables en découdront, j'ai donc le prendre en compte.

118voto

fcw Points 1164

Vous pouvez aussi essayer:

INSERT IGNORE
  INTO table_1 
SELECT *
  FROM table_2
     ;

ce qui permet à ces lignes dans table_1 pour remplacer ceux en table_2 qui ont un correspondant de clé primaire, tout en insérant des lignes avec de nouvelles clés primaires.

Sinon,

REPLACE
   INTO table_1
 SELECT *
   FROM table_2
      ;

mettra à jour ces lignes déjà en table_1 avec la ligne correspondante de table_2, tout en insérant des lignes avec de nouvelles clés primaires.

37voto

Milan Babuškov Points 20423

Il dépend de la sémantique de la clé primaire. Si c'est juste autoincrement, puis utiliser quelque chose comme:

insert into table1 (all columns except pk)
select all_columns_except_pk 
from table2;

Si PK signifie quelque chose, vous avez besoin de trouver un moyen de déterminer l'enregistrement devrait avoir la priorité. Vous pouvez créer une requête sélection pour trouver les doublons en premier (voir réponse par cpitis). Puis éliminer ceux que vous ne voulez pas le garder et de l'utiliser au-dessus de l'insérer pour ajouter des enregistrements qui restent.

21voto

Quassnoi Points 191041
INSERT
INTO    first_table f
SELECT  *
FROM    second_table s
ON DUPLICATE KEY
UPDATE
        s.column1 = DO_WHAT_EVER_MUST_BE_DONE_ON_KEY_CLASH(f.column1)

15voto

Cătălin Pitiș Points 10520

Si vous avez besoin de le faire manuellement, une fois:

Tout d'abord, de fusionner dans une table temporaire, avec quelque chose comme:

create table MERGED as select * from table 1 UNION select * from table 2

Ensuite, identifier les contraintes de clé primaire avec quelque chose comme

SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1

Où PK est le champ de clé primaire...

Résoudre les doublons.

Renommer la table.

[modifié - suppression de parenthèses dans la requête UNION, qui a été la cause de l'erreur dans le commentaire ci-dessous]

6voto

Bill Warren Points 80

Pas aussi compliqué qu'il y paraît.... Il suffit de laisser le double de la clé primaire de votre requête.... cela fonctionne pour moi !

L'INSÉRER DANS le Contenu ( statut, content_category, content_type, content_id, user_id, titre, description,
content_file, content_url, tags, create_date, edit_date, les pistes )

SÉLECTIONNEZ l'état, content_category, content_type, content_id, user_id, titre, description, content_file,
content_url, tags, create_date, edit_date, fonctionne

DE Content_Images

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: