MySQL:如何复制行,但改变几个字段?

我有大量的行,我想复制,但我需要改变一个领域。

我可以select我想要复制的行:

select * from Table where Event_ID = "120" 

现在我想复制所有这些行并创build新的行,同时将Event_ID设置为155 。 我怎样才能做到这一点?

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

在这里,col2,…表示表中剩余的列(Event_ID 以外的列)。

这是一个解决scheme,你的桌子上有很多字段,不想让手指抽筋,只需input所需的字段:)

如何将一些行复制到同一个表中,其中一些字段具有不同的值:

  1. 用您想要复制的所有行创build一个临时表
  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; 

由于临时表的创build使用TEMPORARY关键字,因此会话结束时会自动删除(如@ ar34zbuild议的那样)。

假设你的表有两个其他的列: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是Integer,就这样做:

 INSERT INTO Table (foo, bar, Event_ID) SELECT foo, bar, (Event_ID + 155) FROM Table WHERE Event_ID = "120"