복사하려는 행이 많지만 한 필드를 변경해야합니다.
복사하려는 행을 선택할 수 있습니다.
select * from Table where Event_ID = "120"
지금은 모든 행을 복사를 설정하는 동안 새 행을 만들 Event_ID
에 155
. 어떻게하면됩니까?
답변
INSERT INTO Table
( Event_ID
, col2
...
)
SELECT "155"
, col2
...
FROM Table WHERE Event_ID = "120"
여기서 col2, …는 테이블의 나머지 열 ( Event_ID 이외의 열)을 나타냅니다 .
답변
이것은 테이블에 많은 필드가 있고 모든 필드를 입력하여 손가락 경련을 원하지 않고 필요한 필드를 입력하는 솔루션입니다. 🙂
일부 필드의 값이 다른 일부 행을 동일한 테이블에 복사하는 방법 :
- 복사하려는 모든 행이있는 임시 테이블을 작성하십시오.
- 임시 테이블의 모든 행을 원하는 값으로 업데이트하십시오.
- 자동 증분 필드가있는 경우 임시 테이블에서 NULL로 설정해야합니다.
- 임시 테이블의 모든 행을 원래 테이블에 복사하십시오.
- 임시 테이블 삭제
귀하의 코드 :
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가 제안한대로 키워드가 자동으로 삭제됩니다.
답변
테이블에 두 개의 다른 열이 있다고 가정 해 봅시다 .foo와 bar
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, "155"
FROM Table
WHERE Event_ID = "120"
답변
테이블에 많은 열이 있고 각 열을 입력하지 않으려는 경우 임시 테이블을 사용하여 수행 할 수 있습니다.
SELECT *
INTO #Temp
FROM Table WHERE Event_ID = "120"
GO
UPDATE #TEMP
SET Column = "Changed"
GO
INSERT INTO Table
SELECT *
FROM #Temp
답변
이봐, 모든 필드를 복사하는 방법 중 하나를 같은 값 + 다른 것으로 변경하십시오.
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, Event_ID+"155"
FROM Table
WHERE Event_ID = "120"
??????????
답변
Event_ID가 정수인 경우 다음을 수행하십시오.
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, (Event_ID + 155)
FROM Table
WHERE Event_ID = "120"