2009-09-28 86 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