91 votes

Comment fusionner deux tables MySql ?

Comment fusionner deux tables MySql qui ont la même structure ? Les clés primaires des deux tables vont entrer en conflit, je dois donc en tenir compte.

122voto

fcw Points 1164

Vous pouvez également essayer :

INSERT IGNORE
  INTO table_1 
SELECT *
  FROM table_2
     ;

qui permet aux lignes de la table_1 de remplacer celles de la table_2 qui ont une clé primaire correspondante, tout en insérant des lignes avec de nouvelles clés primaires.

Alternativement,

REPLACE
   INTO table_1
 SELECT *
   FROM table_2
      ;

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

39voto

Milan Babuškov Points 20423

Cela dépend de la sémantique de la clé primaire. Si c'est juste un auto-incrément, alors utilisez quelque chose comme :

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

Si PK signifie quelque chose, vous devez trouver un moyen de déterminer quel enregistrement doit avoir la priorité. Vous pouvez créer une requête de sélection pour trouver d'abord les doublons (cf. réponse de cpitis ). Ensuite, éliminez ceux que vous ne voulez pas garder et utilisez l'insertion ci-dessus pour ajouter les 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 devez le faire manuellement, une seule fois :

D'abord, fusionner dans une table temporaire, avec quelque chose comme :

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

Ensuite, identifiez 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 la clé primaire...

Résolvez les doublons.

Renommez la table.

[modifié - suppression des parenthèses dans la requête UNION, qui provoquait l'erreur dans le commentaire ci-dessous].

7voto

Bill Warren Points 80

Pas aussi compliqué qu'il n'y paraît.... Laissez juste la clé primaire dupliquée hors de votre requête.... cela fonctionne pour moi !

INSERT INTO Content ( status, content_category, content_type, content_id, user_id, title, description,
content_file, content_url, tags, create_date, edit_date, runs )

SELECT status, content_category, content_type, content_id, user_id, title, description, content_file,
content_url, tags, create_date, edit_date, runs

FROM Contenu_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:

X