2012-02-17 10 views
1

1つのmysqlテーブルの構造と内容を別のテーブルにコピーし、そのテーブルのすべての列と値を既存のテーブルの既存のものに追加したいとします。あるmysqlテーブルの列(構造と内容)を別のテーブルに追加することはできますか?

私は手動で行うことができますが、大量のカラムについて話しているので、それを行うのに役立つALTER文があれば素晴らしいでしょう。

EDIT:

より良い自分自身を説明するために:

私は、最初のテーブルB(COLUMN_NAME、DATA_TYPE)に含まれる列を追加する必要があります(すでに列の独自のセットを持っている)テーブルAへ。それが終わると、簡単に内容をコピーすることができます。

本当の質問は、テーブルBに含まれている列を別のテーブル(テーブルA)に追加する方法ですか?

+0

PHPのような言語で行うのはかなり簡単です。 –

答えて

1

の挿入を実行順序を入れ替え、エクスポート/インポートのステップが必要とされないように私には思えます。私が問題を正しく理解していれば、次の1ライナーがそれを行うべきです。

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

申し訳ありませんが、私はこれをコメントに入れましたが、私は評判が足りません!

1

これは、すべてのデータをソーステーブルからターゲットテーブルにコピーします。移動する列を指定できます。 targetColumnのの名前を変更することで...とと、SourceColumn ....

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

あなたはまた、

CREATE TABLE targetTable LIKE sourceTable 

EDITターゲット表にsourceTableからすべてのデータをプルする方法を実行してsourceTableを作成することができます、しかし、古い保持する必要がある場合、それは

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

EDITが存在する場合はターゲット表を削除データは、あなたはそれを再マップする必要があるかもしれませんが、あなたが他のテーブルに

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; 

をマージすることができますしかし、これは潜在的にどちらか..... DUPLICATE KEY UPDATE ONロジックが必要になります、または単にあなたが満足している場合には、第2にIGNORE INSERT PRIMARY/UNIQUEキーの競合する行をすべて破棄します。これは、コピーしてoldTargetTableのデータとマージするsourceTableがあることを前提としています。テーブルtargetTableは単なる一時的な名前です。

古いテーブルからデータを好むしたい場合は、ちょうどあなたがflavianatillの第二の溶液に構築するには、もちろん

+0

あなたの答えをありがとう、サイモン。しかし、これは簡単な部分である私の質問の "内容"の部分を解決するだけです! 私がしたいのは、テーブルBの構造と内容の両方をテーブルA(すでに独自の列と値のセットを持っている)に追加することです。 - 構造と内容の両方 表C = CONCAT(テーブルA、テーブルB)のような 何か。 CREATE TABLEステートメントは同じ構造の新しいテーブルを作成しますが、新しいテーブルを作成する必要はありません。既存のテーブルに追加する必要があります。 – flavianatill

+0

私たちは最近、実稼働環境のデータベースをdevに戻すためのシステムを作成しなければなりませんでした。そのために、最も効率的な方法はtargetTableを単に削除することだとわかりました。テーブルを作成するtargetTable LIKE sourceTable; INSERT INTOターゲットテーブルSELECT * FROM sourceTable; ALTERは潜在的に大規模なテーブルでデータを同期させず/遅くするためです。これは、すべてのデータをソースからターゲットに –

関連する問題