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所需的字段:)
如何将一些行复制到同一个表中,其中一些字段具有不同的值:
- 用您想要复制的所有行创build一个临时表
- 使用所需的值更新临时表中的所有行
- 如果您有一个自动增量字段,则应该在临时表中将其设置为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;
由于临时表的创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"