从这个问题:使用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得到相同的结果.
让我们从最里面的选择开始;
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)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |