2009-09-28 91 views
0

有时候,如果我想快速地从一个表复制记录到另一个(即具有相同的结构),我用这样的查询:MySQL的:更新所有列使用值从单独的表

INSERT INTO表2 SELECT * FROM表1 WHERE ID = SOME_VALUE

我怎么能一个对重复密钥更新添加到这个声明?我尝试这样做:

INSERT INTO SELECT * FROM表1 WHERE ID = 1对重复密钥更新SELECT * FROM表1 WHERE ID = 1

但我得到一个错误。有没有完成上面的查询,单独列出查询中的每个列?

P.S.是的,我意识到拥有多个具有相同结构的表格并不是一个好习惯,但有时您无法控制工作场所中的所有内容!

+0

请出示表的结构(或其相关部分,特别是不能重复的密钥的定义),以及可能是一行的示例。 – mjv 2009-09-28 19:35:18

回答

1

以下更新如果没有PK重复和插入是有:

REPLACE INTO table2(field1, field2, field3) 
SELECT field1, field2,field3 FROM table1 
WHERE id=1; 
+0

我会注意到这是一个非标准的MySQL扩展(这就是为什么它对我来说是新的)。 – tpdi 2009-09-28 20:00:16

+0

其实REPLACE删除记录,然后插入一条新记录,所以如果你使用任何时间戳将丢失 – 2009-09-28 20:21:12

+0

但这确实回答了问题+1 – 2009-09-28 20:22:07