Est-il possible d'ajouter les colonnes (structure et contenu) d'une table MySQL à un autre?

StackOverflow https://stackoverflow.com/questions/9327873

  •  27-10-2019
  •  | 
  •  

Question

Je voudrais copier la structure et le contenu d'une table MySQL à un autre, en ajoutant toutes les colonnes et les valeurs de cette table à ceux qui existent déjà dans l'autre table.

je pouvais le faire manuellement, mais depuis que je parle d'une grande quantité de colonnes, ce serait bien s'il y avait une sorte de déclaration ALTER me aider le faire.

EDIT:

Pour me expliquer mieux:

J'ai d'abord besoin d'ajouter les colonnes contenues dans le tableau B (nom_colonne, data_type) au tableau A (qui a déjà son propre ensemble de colonnes). Une fois cela fait, je peux copier le contenu, ce qui est facile.

Je suppose que la vraie question est: est-il possible d'ajouter les colonnes contenues dans le tableau B à une autre table (tableau A) qui comporte des colonnes de son propre

?
Était-ce utile?

La solution

misera sur la deuxième solution de flavianatill, il me semble que l'exportation / étape d'importation n'est pas nécessaire. Si je comprends bien le problème, celui-liner suivant devrait le faire.

CREATE TABLE IF NOT EXISTS merged_table AS (SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id);

Désolé, je l'aurais mis cela dans un commentaire, mais je manque la réputation!

Autres conseils

Cette copie toutes les données à partir d'une table source à une table cible. Vous pouvez spécifier les colonnes qui doivent aller. en changeant les noms des targetColumn .. et sourceColumn ....

INSERT INTO targetTable (
    targetColumn1
    targetColumn1
    targetColumn1
....
    targetColumnN
) 
SELECT
    sourceColumn1
    sourceColumn1
    sourceColumn1
....
    sourceColumnN
FROM sourceTable

Vous pouvez également créer SourceTable en faisant

CREATE TABLE targetTable LIKE sourceTable

EDIT Une méthode pour tirer toutes les données de SourceTable à targettable, mais la suppression targettable si elle existe

DROP TABLE IF EXISTS targetTable;
CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;

EDIT Si vous avez besoin de garder les anciennes données, vous devrez peut-être, mais vous remapper pouvez fusionner dans d'autres tables

CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;
INSERT INTO targetTable ( fieldsToInsertTo ) SELECT fieldsToSelectFrom FROM oldTargetTable ON DUPLICATE KEY ......;
DROP TABLE IF EXISTS oldTargetTable;
RENAME TABLE targetTable TO oldTargetTable;

Cela cependant potentiellement soit besoin Duplicate KEY UPDATE ..... logique, ou simplement INSERT IGNORE sur la seconde si vous êtes heureux de jeter une clé primaire / UNIQUE lignes en conflit. Cela suppose que vous avez SourceTable que vous souhaitez copier et de fusionner avec les données de oldTargetTable. Le tableau targettable est juste un nom temporaire.

Si vous voulez préférer les données de l'ancienne table puis juste échanger l'ordre que vous effectuez les INSERTs bien sûr

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top