MySQL错误:UPDATE和LIMIT的使用不正确

HEL*_*ELP 23 mysql sql-update

如何更正此问题以便我的MySQL代码正常工作.

这是我的MySQL代码,它给了我这个问题.

$q = "UPDATE users INNER JOIN contact_info ON contact_info.user_id = users.user_id SET active.users = NULL WHERE (email.contact_info = '" . mysqli_real_escape_string($mysqli, $x) . "' AND active.users = '" . mysqli_real_escape_string($mysqli, $y) . "') LIMIT 1";
$r = mysqli_query ($mysqli, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($mysqli));
Run Code Online (Sandbox Code Playgroud)

Mar*_*c B 46

根据更新的MySQL文档:

对于多表语法,UPDATE更新table_references中指定的满足条件的每个表中的行.在这种情况下,不能使用ORDER BY和LIMIT.

  • 我想文档实际上是说“既不能使用 ORDER BY 也不能使用 LIMIT”,因为我尝试在不使用 ORDER BY 的情况下使用 LIMIT,但仍然遇到了此错误。 (3认同)

小智 17

**如果你想在mysql中使用limit更新多行...直接限制你不能使用试试这样**

UPDATE table_name SET name='test'
     WHERE id IN (
         SELECT id FROM (
             SELECT id FROM table_name 
             ORDER BY id ASC  
             LIMIT 0, 10
         ) tmp
     );
Run Code Online (Sandbox Code Playgroud)

  • 在`IN()`中的子选择与****一样慢,并且可以像永远一样锁定表.请改用"EXISTS()". (6认同)

Sha*_*lin 5

我知道这是一个老问题,但它是谷歌搜索此错误时的第一个链接。有一种解决方法可以通过使用派生表来解决此问题,而不会出现性能问题(取决于您的索引)。

UPDATE table1 t1
JOIN (SELECT t1.id
    FROM table1 t1
    JOIN table2 t2 ON t1.id = t2.id
        AND t2.some_criteria = 'some_value'
    WHERE t1.other_criteria = 'other_value'
    LIMIT 10000
) tmp ON tmp.id = t1.id
SET t1.field_to_update = 'new_value'
Run Code Online (Sandbox Code Playgroud)

由于 LIMIT 位于子查询内部,因此联接将仅匹配子句 LIMIT 的行数。因此查询将仅更新这些行。