2011-01-05 34 views
0

同じ構造のテーブルが2つあり、どちらもIDフィールドがauto_incrementです。 あるテーブルから別のテーブルに行を移動したいと思います。MySQLテーブル間で行を移動

は、私が使用することができます知っている:

INSERT INTO `new_table` VALUES (SELECT * FROM `old_table`) 

しかし、その方法はnew_tableでIDがold_tableのIDを受信します。だから私は基本的にauto_incrementの値をnew_tableにする必要があるIDを除くすべてのフィールドをコピーしたいと思うだろう。どうやってやるの?

ありがとうございます!

ジョエル


EDIT:

申し訳ありませんが、私は私のオリジナルのポストに言及している必要があります - 私は、特に、各フィールドを選択せず​​にそれを行う方法をしたいと思い、私は主にので、私はより一般的なアプローチを探しています。

ありがとうございます!

+0

wow! 1分で4つの全く同じ反応!幸せになる。 :) – Nishant

+0

hehe、それは私の悪いことでした、私は私の元の投稿で一般的なアプローチを探しています...私は今編集したと述べている必要があります – Joel

答えて

3
INSERT INTO `new_table` (name, surname, email) 
    (SELECT name, email, surname FROM `old_table`); 

MySQLは自動的場合に新しいIDを割り当てるせるときあなたが同様に移動する必要がある他のテーブルからの関係がありますが注意してください。

このような場合は、IDに既知のオフセットを追加することでデータ全体を移動します。これは、ターゲット表のIDの衝突を避けるのに十分な大きさになります。オフセットは既知なので、他のテーブルからリレーションを(ターゲットテーブルに)移動するときに同じオフセットを適用できます。

質問編集に基づいて編集:「一般的なアプローチ」を避けることを強くお勧めします。それはすべてのフィールドを書くことを賢明にしなければならないかもしれませんが、それは間違いやID衝突の問題を避ける唯一の方法です。フィールド名の入力を避けたい場合(退屈でエラーが発生しやすいので)、フィールド名をコピーしてshow create table new_tableからコピーすることができます。

+0

ありがとう、おそらくあなたのやり方が良い! – Joel

1

その場合には、IDを選択しないでください:

INSERT INTO `new_table` (`field2`, `field3`) VALUES (SELECT `field2`, `field3` FROM `old_table`) 
0
INSERT INTO `new_table` (COLS-I-WANT) 
VALUES (SELECT (OLD-COLS-I-WANT) FROM `old_table`) 

・ホープ、このことができます。

0

ID列を除くINSERTリストとSELECTリストの両方の列名を指定してください

関連する問題