sql >> データベース >  >> RDS >> Mysql

行をコピーしますが、新しいIDを使用します

    テーブルに次のフィールドがあるとします。

    ( 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;
    

    これがお役に立てば幸いです。



    1. mysqlからn番目ごとの行をどのように選択しますか

    2. データをsqliteデータベースに1回だけ追加し、複数回読み取ります

    3. LEFTJOINを含む4つのテーブルを重複せずに結合します

    4. SQLの結果をリストPythonに変換します