错误的更新限制了mysql

Gon*_*sta 5 php mysql

从这个问题:使用mysql中的限制更新多行?我为MySQL查询创建了这段代码:

UPDATE clientes SET telemarketer =1
WHERE telemarketer IN (
     SELECT telemarketer FROM (
         SELECT telemarketer FROM clientes 
         WHERE telemarketer=0
         ORDER BY telemarketer DESC
         LIMIT 0, 10
     ) temporal
 );
Run Code Online (Sandbox Code Playgroud)

但它正在回归SELECT telemarketer FROM clientes.

环顾四周,我发现ORDER BY在案件中需要它,或者它会返回随机行.

为什么不LIMIT工作?

已经尝试使用LIMIT 10而不是LIMIT 0, 10得到相同的结果.

Joa*_*son 4

让我们从最里面的选择开始;

 SELECT telemarketer FROM clientes 
 WHERE telemarketer=0
Run Code Online (Sandbox Code Playgroud)

...返回零行或多行 0,因为这是唯一允许返回的值。order by 是无关紧要的,因为所有行都具有相同的值,并且 limit 仅将零的数量限制为 10。

这意味着您的整个查询;

UPDATE clientes SET telemarketer =1
WHERE telemarketer IN (
   SELECT telemarketer FROM (
      SELECT telemarketer FROM clientes 
      WHERE telemarketer=0
      ORDER BY telemarketer DESC
      LIMIT 0, 10
   ) temporal
);
Run Code Online (Sandbox Code Playgroud)

...变成;

UPDATE clientes SET telemarketer =1
WHERE telemarketer IN (0, 0, ..., 0);
Run Code Online (Sandbox Code Playgroud)

如果 telemarketer 为 0 的行数超过 10 行,则无论内部查询的限制如何,它们都会被返回。

您可能想要的是使用唯一字段(主键?)来标识要更新的行;

UPDATE clientes SET telemarketer=1 
WHERE primary_key IN (
  SELECT primary_key FROM (
    SELECT primary_key FROM clientes WHERE telemarketer=0 LIMIT 10
  ) a
)
Run Code Online (Sandbox Code Playgroud)

用于测试的 SQLfiddle