Mysql 我不明白为什么这个SQL查询不起作用,在这种情况下我不允许使用子查询吗?

Mysql 我不明白为什么这个SQL查询不起作用,在这种情况下我不允许使用子查询吗?,mysql,subquery,Mysql,Subquery,我正在尝试用max(amount)更新行的数量 不,你不是。不能在子查询中使用同一个表从表进行更新 请参见本页末尾(评论之前): 当前,无法更新表并在子查询中从同一表中进行选择 如果您决定将其分为两个单独的查询,一个用于获取最大值,另一个用于执行更新,请记住在事务中执行此操作,并使用Select。。。更新;因此,mysql将锁定您将要更新的记录,否则,并发可能会产生一些令人讨厌的问题(如果它适用于您的特定情况)。请注意:如果您的$diff和$id变量来自用户,那么这种构造查询的方法很容易受到注

我正在尝试用max(amount)更新行的数量


不,你不是。不能在子查询中使用同一个表从表进行更新

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

当前,无法更新表并在子查询中从同一表中进行选择


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

请注意:如果您的
$diff
$id
变量来自用户,那么这种构造查询的方法很容易受到注入攻击。此外,使用双引号,PHP将查找字符串中的变量,因此不需要使用串联。i、 e.
“…SET amount=amount-$diff其中…”
将起作用。谢谢JYelton,这些都是内部值,但无论如何,每个用户输入都会用
mysqli->real\u escape\u字符串($\u GET[$key])转义。
$this -> mysqli->query("
    UPDATE `table`
    SET `amount` = amount - '".$diff."'
    WHERE `s_ID` = '".$id."'
    AND `amount` = (SELECT MAX(amount) FROM table)
") ;