mySQL UPDATE值基于SELECT值值+1递增列值

chr*_*ris 5 mysql

查询:

UPDATE nominees SET votes = ( SELECT votes
FROM nominees
WHERE ID =1 ) +1
Run Code Online (Sandbox Code Playgroud)

错误:

您无法在FROM中指定要更新的目标表'nominees'

根据错误,不确定那里有什么问题,这是我第一次尝试内联列,我想你可以调用它.所以我很明显做错了什么但不知道如何解决它.

Mar*_*ith 12

您的UPDATE查询缺少任何WHERE子句,因此即使MySQL允许它,然后效果是找到行add 1 的votes值,ID =1然后用结果更新表中的所有行.

我怀疑这不是理想的行为.要增加列值,您只需要执行此操作

UPDATE nominees 
SET votes = votes +1
WHERE ID =1 
Run Code Online (Sandbox Code Playgroud)

万一你确实需要其他行为,你需要做

UPDATE nominees
SET    votes = (select votes + 1
                FROM   (SELECT votes
                        FROM   nominees
                        WHERE  ID = 1) T)  
Run Code Online (Sandbox Code Playgroud)

这种包装到派生表中可以避免出现You can't specify target table 'nominees' for update in FROM错误.

  • 那就是那张票!也许我已经厌倦了这个$*(#tonight .. makin简单的错误到处都是. (2认同)
  • @chris - 它只是子查询/派生表的任意表别名.可选地,它可以说')AS T`.有关这些内容的更多信息,请参阅http://dev.mysql.com/doc/refman/5.6/en/from-clause-subqueries.html. (2认同)