2011-08-23 125 views
0

我嘗試更新表的一些列不同的表,現在的我只是找到了如何從一個表中插入一行到另一個,如:如何從一個表更新一行到另一個表?

INSERT INTO dialecte_org_5.tb_data_iae (
    SELECT * FROM dialecte_org_88.tb_data_iae WHERE id_dialecte = 2413 
); 

什麼可能是相同的語句,但更新? 有沒有一種方法,使這樣的事情,如果行存在 - >「更新」,如果沒有「插入」

THX

+1

可能重複[如何更新,如果存在,插入如果不是(又名更新插入或合併)在MySQL?](http://stackoverflow.com/questions/1218905/how-do-i-update-if-exists-insert-if-not-aka-upsert-or-merge-in-mysql) –

+0

thx我要和Doug的解決方案混在一起 – krifur

回答

2

對於插入,通常你要指定兩個完整的字段列表INSERT語句和選擇(http://dev.mysql.com/doc/refman/5.5/en/insert.html):

INSERT INTO dialecte_org_5.tb_data_iae (field1, field2, field3) 
SELECT field1, field2, field3 
FROM dialecte_org_88.tb_data_iae WHERE id_dialecte=2413; 

和更新語句更喜歡這個(http://dev.mysql.com/doc/refman/5.0/en/update.html):

UPDATE dialecte_org_5.tb_data_iae t1 
INNER JOIN dialecte_org_88.tb_data_iae t2 ON t1.id = t2.id 
SET t1.field1 = t2.field1, t1.field2 = t2.field2, t1.field3 = t2.field3 
WHERE t2.id_dialecte=2413 

您還可以使用REPLACE INTO,其中同時做兩,但MySQL的具體的,而不是其他的RDBMS(http://dev.mysql.com/doc/refman/5.0/en/replace.html)支持:

REPLACE INTO dialecte_org_5.tb_data_iae t1 
INNER JOIN dialecte_org_88.tb_data_iae t2 ON t1.id = t2.id 
SET t1.field1 = t2.field1, t1.field2 = t2.field2, t1.field3 = t2.field3 
WHERE t2.id_dialecte=2413 
+0

thx我想我會避免替換,但爲什麼除了列出所有字段的解決方案之外,沒有解決方案?不可能只用主鍵來完成? – krifur

+1

如果您沒有列出這些字段,則它們必須以完全相同的順序排列在同一個字段中。如果您現在編寫的代碼沒有列出字段,稍後可能會更改其中一個表,並且例程會中斷。 –