1

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

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

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

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

显然,这是行不通的。(sometable 和 anothertable 的结构是相同的)。

4

2 回答 2

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'
于 2012-11-02T15:08:02.530 回答
2

如果您尝试根据主键的匹配来更新行,那么您可以使用REPLACE而不是 INSERT。

REPLACE INTO sometable SELECT * FROM anothertable WHERE somefield='somevalue';

这意味着当主键列与 中的主键列anothertable具有相同的值时sometable,则 SELECT 返回的所有其他列都将用于覆盖 中的这些列sometable

http://dev.mysql.com/doc/refman/5.5/en/replace.html

如果行匹配基于主键以外的其他内容,则您必须使用@John Woo 所示的多表 UPDATE 语法。

于 2012-11-02T15:11:57.243 回答