2011-08-23 130 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

如果您没有列出这些字段,则它们必须以完全相同的顺序排列在同一个字段中。如果您现在编写的代码没有列出字段,稍后可能会更改其中一个表,并且例程会中断。 –