我尝试更新表的一些列不同的表,现在的我只是找到了如何从一个表中插入一行到另一个,如:如何从一个表更新一行到另一个表?
INSERT INTO dialecte_org_5.tb_data_iae (
SELECT * FROM dialecte_org_88.tb_data_iae WHERE id_dialecte = 2413
);
什么可能是相同的语句,但更新? 有没有一种方法,使这样的事情,如果行存在 - >“更新”,如果没有“插入”
THX
我尝试更新表的一些列不同的表,现在的我只是找到了如何从一个表中插入一行到另一个,如:如何从一个表更新一行到另一个表?
INSERT INTO dialecte_org_5.tb_data_iae (
SELECT * FROM dialecte_org_88.tb_data_iae WHERE id_dialecte = 2413
);
什么可能是相同的语句,但更新? 有没有一种方法,使这样的事情,如果行存在 - >“更新”,如果没有“插入”
THX
对于插入,通常你要指定两个完整的字段列表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
的
thx我想我会避免替换,但为什么除了列出所有字段的解决方案之外,没有解决方案?不可能只用主键来完成? – krifur
如果您没有列出这些字段,则它们必须以完全相同的顺序排列在同一个字段中。如果您现在编写的代码没有列出字段,稍后可能会更改其中一个表,并且例程会中断。 –
可能重复[如何更新,如果存在,插入如果不是(又名更新插入或合并)在MySQL?](http://stackoverflow.com/questions/1218905/how-do-i-update-if-exists-insert-if-not-aka-upsert-or-merge-in-mysql) –
thx我要和Doug的解决方案混在一起 – krifur