回答:
INSERT INTO Table
( Event_ID
, col2
...
)
SELECT "155"
, col2
...
FROM Table WHERE Event_ID = "120"
ここで、col2、...は、テーブルの残りの列(Event_ID 以外の列)を表します。
これは、テーブルに多くのフィールドがあり、すべてのフィールドを入力する手間をかけたくない場合に必要なフィールドを入力するだけのソリューションです:)
一部の行を同じテーブルにコピーし、一部のフィールドに異なる値を設定する方法:
あなたのコード:
CREATE table temporary_table AS SELECT * FROM original_table WHERE Event_ID="155";
UPDATE temporary_table SET Event_ID="120";
UPDATE temporary_table SET ID=NULL
INSERT INTO original_table SELECT * FROM temporary_table;
DROP TABLE temporary_table
一般的なシナリオコード:
CREATE table temporary_table AS SELECT * FROM original_table WHERE <conditions>;
UPDATE temporary_table SET <fieldx>=<valuex>, <fieldy>=<valuey>, ...;
UPDATE temporary_table SET <auto_inc_field>=NULL;
INSERT INTO original_table SELECT * FROM temporary_table;
DROP TABLE temporary_table
簡略化/圧縮されたコード:
CREATE TEMPORARY TABLE temporary_table AS SELECT * FROM original_table WHERE <conditions>;
UPDATE temporary_table SET <auto_inc_field>=NULL, <fieldx>=<valuex>, <fieldy>=<valuey>, ...;
INSERT INTO original_table SELECT * FROM temporary_table;
一時テーブルの作成はTEMPORARYキーワードを使用するため、セッションが終了すると(@ ar34zが示唆するように)自動的に削除されます。
TEMPORARY一時テーブルを作成するためのキーワードをサポートしています。CREATE TEMPORARY TABLEセッション(SQLクエリのシリーズ)が終了すると、の使用によりテーブルが自動的に削除されます。テーブルを削除する必要はなく、同じ名前を使用する他の一時テーブルと競合しません。(例:ライブハッキングの場合(お勧めしません))
ALTER TABLE temporary_table MODIFY <auto_inc_not_null_field> INT; そうすると、主キーのNullへの更新が失敗しなくなります。
Exception: null value in column <auto_inc_not_null_field> violates not-null constraint。私が試したALTER TABLE temporary_table ALTER COLUMN <auto_inc_not_null_field> DROP NOT NULL;
テーブルに多数の列があり、それぞれを入力したくない場合は、次のように一時テーブルを使用して列を入力できます。
SELECT *
INTO #Temp
FROM Table WHERE Event_ID = "120"
GO
UPDATE #TEMP
SET Column = "Changed"
GO
INSERT INTO Table
SELECT *
FROM #Temp
Event_IDがIntegerである限り、次のようにします。
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, (Event_ID + 155)
FROM Table
WHERE Event_ID = "120"