답변:
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가 정수인 경우 다음을 수행하십시오.
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, (Event_ID + 155)
FROM Table
WHERE Event_ID = "120"