MySQL:如何复制行,但改变几个字段?
问题描述:
我有大量的行我想复制,但我需要更改一个字段。MySQL:如何复制行,但改变几个字段?
我可以选择,我要复制的行:
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 等)在表格中。
答
嘿怎么样复制各个领域,改变其中的一个相同的值+别的东西。
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, Event_ID+"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
+5
注:假设你的表中没有主键 – kommradHomer 2014-07-25 07:33:11
答
这就是你有很多领域在你的桌子和不想打字的所有领域得到了手指抽筋,只需键入所需的人:)
如何复制解决方案一些行到相同的表,具有不同价值观的某些字段:
- 所有你想在颞复制
- 更新所有行的行创建临时表你想
- 如果你有一个自动递增字段,你应该把它设置为NULL在临时表
- 临时表中的所有行复制到原始表中的值RY表
- 删除临时表
您的代码:
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建议的)将被自动删除。
答
只要EVENT_ID是整数,这样做:
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, (Event_ID + 155)
FROM Table
WHERE Event_ID = "120"
有没有办法做到这一点,而不必指定列名? – Andrew 2010-05-06 18:00:24
不是我所知道的。当然,如果你的表有1000列或其他东西,而你不想全部输入,那么你可以编写一个SQL语句来构建你的SQL语句:)。你会这样做的方式是使用information_schema来获取表的列名。但是这真是太过分了,我只是输入列名。 – dcp 2010-05-06 18:21:10
正是我需要的例子,谢谢。我不确定你是否可以这样做。 – salonMonsters 2010-11-29 20:35:05