[MySQL]テーブルの指定カラムのデータを丸ごと別のテーブルにコピーする

Read More

基本的にテーブルのデータを丸ごとコピーする方法と同じ。


まずは基本となるテーブルのデータを丸ごとコピーする方法について。


テーブルの例)
・コピー元テーブル情報
テーブル:a_table
カラム:id, name, old

・コピー先テーブル情報
テーブル:b_table
カラム:id, name, old

上記のように同じテーブル構成のものがあったとする。


■テーブルのデータを丸ごとコピーするSQL
INSERT INTO b_table SELECT * FROM a_table
FROM句のあとにWHERE句で条件を指定することも可能。


これでa_tableのデータがb_tableに丸ごとコピーされる。

この方法でデータをコピーする場合の注意点は、
それぞれのテーブルのカラムが同じ
であるという点。

テーブルのカラムがコピー元とコピー先とで違う場合は以下に書く方法で。



--
コピー元テーブルとコピー先テーブルのカラム数(或いはカラム名)が異なる場合について。


テーブルの例)
・コピー元テーブル情報
テーブル:a_table
カラム:id, name, old

・コピー先テーブル情報
テーブル:c_table
カラム:id, name, blood

上記のようにテーブルの一部のカラムが違う場合など。


■テーブルの指定カラムのデータのみ別のテーブルにコピーするSQL
INSERT INTO c_table (id, name) SELECT id, name FROM a_table



上記の方法だとbloodが空になってしまうがデータをコピーする際にbloodに初期値をあてることもできる。

■bloodに初期値をあてる
INSERT INTO c_table (id, name, blood) SELECT id, name, 1 FROM a_table





さて、ここまで書けばわかると思うがデータを丸ごとコピーする場合はそれぞれのテーブルのカラムが一致する必要があると先述したが、必ずしもそうではないということだ。


カラム数が違おうが、カラム順序が違おうが、カラムの型が違おうがコピーする際にきちんとカラムを指定すれば特に問題にはならない。