[sql] MySQL : 행을 복사하는 방법은 있지만 몇 가지 필드를 변경하는 방법은 무엇입니까?

복사하려는 행이 많지만 한 필드를 변경해야합니다.

복사하려는 행을 선택할 수 있습니다.

select * from Table where Event_ID = "120"

지금은 모든 행을 복사를 설정하는 동안 새 행을 만들 Event_ID155. 어떻게하면됩니까?



답변

INSERT INTO Table
          ( Event_ID
          , col2
           ...
          )
     SELECT "155"
          , col2
           ...
      FROM Table WHERE Event_ID = "120"

여기서 col2, …는 테이블의 나머지 열 ( Event_ID 이외의 열)을 나타냅니다 .


답변

이것은 테이블에 많은 필드가 있고 모든 필드를 입력하여 손가락 경련을 원하지 않고 필요한 필드를 입력하는 솔루션입니다. 🙂

일부 필드의 값이 다른 일부 행을 동일한 테이블에 복사하는 방법 :

  1. 복사하려는 모든 행이있는 임시 테이블을 작성하십시오.
  2. 임시 테이블의 모든 행을 원하는 값으로 업데이트하십시오.
  3. 자동 증분 필드가있는 경우 임시 테이블에서 NULL로 설정해야합니다.
  4. 임시 테이블의 모든 행을 원래 테이블에 복사하십시오.
  5. 임시 테이블 삭제

귀하의 코드 :

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"


답변