使用select in set子句更新MySQL表中的行

时间:2012-11-02 15:05:23

标签: mysql sql-update insert-update

很容易从另一个MySQL表中将一行插入MySQL表中:

INSERT INTO sometable (SELECT * FROM anothertable WHERE somefield='somevalue')

但如果我想更新而不是插入,我该怎么做?我正在寻找类似于

的东西
UPDATE sometable SET (SELECT * FROM anothertable WHERE somefield='somevalue')

显然,这不起作用。 (可以和某些人的结构相同)。

2 个答案:

答案 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语法。