一時テーブルを作成する手間をかけずに、SQL 内でこれを完全に実行できるとは思いません。メモリ内で実行すると、はるかに高速になります。一時テーブル ルートを使用する場合は、コードが同時に 2 回実行されて 2 行のデータが 1 つの一時テーブルにマングルされる競合状態を回避するために、関数呼び出しごとにテーブルに一意の名前を選択する必要があることに注意してください。
使用している言語の種類はわかりませんが、プログラム内のフィールドのリストを取得できるはずです。私は次のようにします:
array_of_field_names = conn->get_field__list;
array_of_row_values = conn->execute ("SELECT... ");
array_of_row_values ["ID"] = new_id_value
insert_query_string = "construct insert query string from list of field names and values";
conn->execute (insert_query_string);
次に、それを関数としてカプセル化し、テーブル、古いID、新しいIDを指定して呼び出すだけで、魔法のように機能します。
Perl コードでは、次のスニペットが実行されます。
$table_name = "MYTABLE";
$field_name = "ID";
$existing_field_value = "100";
$new_field_value = "101";
my $q = $dbh->prepare ("SELECT * FROM $table_name WHERE $field_name=?");
$q->execute ($existing_field_value);
my $rowdata = $q->fetchrow_hashref; # includes field names
$rowdata->{$field_name} = $new_field_value;
my $insq = $dbh->prepare ("INSERT INTO $table_name (" . join (", ", keys %$rowdata) .
") VALUES (" . join (", ", map { "?" } keys %$rowdata) . ");";
$insq->execute (values %$rowdata);
お役に立てれば。