テーブルに次のフィールドがあるとします。
( pk_id int not null auto_increment primary key,
col1 int,
col2 varchar(10)
)
次に、新しいキー値を使用して1つの行から別の行に値をコピーするには、次のクエリが役立つ場合があります
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;
これにより、pk_id
の新しい値が生成されます フィールドとcol1
からの値のコピー 、およびcol2
選択した行の。
このサンプルを拡張して、テーブル内のより多くのフィールドに適用できます。
更新 :
JohnPとMartinからのコメントに敬意を表して -
一時テーブルを使用して、最初にメインテーブルからバッファリングし、それを使用してメインテーブルに再度コピーできます。一時テーブルのpk参照フィールドを更新するだけでは、メインテーブルにすでに存在している可能性があるため役に立ちません。代わりに、一時テーブルからpkフィールドを削除し、他のすべてをメインテーブルにコピーできます。
TimRuehsen の回答を参照してください 参照された投稿 :
CREATE TEMPORARY TABLE tmp SELECT * from my_table WHERE ...;
ALTER TABLE tmp drop pk_id; # drop autoincrement field
# UPDATE tmp SET ...; # just needed to change other unique keys
INSERT INTO my_table SELECT 0,tmp.* FROM tmp;
DROP TEMPORARY TABLE tmp;
これがお役に立てば幸いです。