很容易从另一个MySQL表中将一行插入MySQL表中:
INSERT INTO sometable (SELECT * FROM anothertable WHERE somefield='somevalue')
但如果我想更新而不是插入,我该怎么做?我正在寻找类似于
的东西UPDATE sometable SET (SELECT * FROM anothertable WHERE somefield='somevalue')
显然,这不起作用。 (可以和某些人的结构相同)。
答案 0 :(得分:3)
你可以加入这两个表,试试这样的
UPDATE sometable a
INNER JOIN anotherTable b
ON a.colname = b.colName
SET a.val = b.val,
a.val2 = b.val2
WHERE b.somefield='somevalue'
答案 1 :(得分:2)
如果您尝试根据主键的匹配更新行,则可以使用REPLACE
而不是INSERT。
REPLACE INTO sometable SELECT * FROM anothertable WHERE somefield='somevalue';
这意味着当anothertable
中的主键列与sometable
中的主键列具有相同的值时,SELECT返回的所有其他列将用于覆盖{sometable
中的那些列。 1}}。
请参阅http://dev.mysql.com/doc/refman/5.5/en/replace.html
如果行匹配基于主键以外的其他内容,那么您必须使用@John Woo所示的多表UPDATE语法。