我无法弄清楚为什么这个SQL查询不起作用,我不允许在这种情况下使用子查询?

时间:2012-02-10 16:53:38

标签: mysql mysqli subquery

我正在尝试使用max(amount)

更新行的数量
$this -> mysqli->query("
    UPDATE `table`
    SET `amount` = amount - '".$diff."'
    WHERE `s_ID` = '".$id."'
    AND `amount` = (SELECT MAX(amount) FROM table)
") ;

1 个答案:

答案 0 :(得分:4)

不,你不是。您无法使用子查询中的相同表从表中进行更新。

http://dev.mysql.com/doc/refman/5.0/en/update.html

请参阅本页末尾(评论之前):

  

目前,您无法更新表并从子查询中的同一表中进行选择。

如果您决定将其分为两个单独的查询,一个用于获取最大值而另一个用于执行更新,请记住在事务中执行此操作,并使用Select ...进行更新;所以mysql会锁定你要更新的记录,否则,并发会产生一些令人讨厌的问题(如果它适用于你的特定情况)。