从数据库中的多个行中删除数量

php*_*meh 1 mysql

这是我的表结构:
table.id(自动增量;主键)
table.qty(可能的值:0 - 1000)

行:

+----+-----+
| id | qty |
+----+-----+
|  1 |   0 |
|  2 |   5 |
|  3 |   5 |
|  4 |  10 |
+----+-----+

我希望减少12的可用数量.意思是,新结果应该是:
编辑:我可能应该指定所有这些数字是任意的.它们可以是任何东西.

+----+-----+
| id | qty |
+----+-----+
|  1 |   0 |
|  2 |   0 |
|  3 |   0 |
|  4 |   8 |
+----+-----+

现在,我做了以下事情:

  1. SELECT id, qty FROM table WHERE qty > 0 LIMIT 12

  2. 过滤所有数据以确定从每行中删除的数量

  3. 使用PDO预处理语句批量更新受影响的行:

    UPDATE `table` SET qty = ? WHERE id = ?`
    
    Run Code Online (Sandbox Code Playgroud)

我的问题:在MySQL中有没有办法做到这一点?

egg*_*yal 5

SET @q = 12;

UPDATE `table`
SET qty = CONCAT(GREATEST(qty - @q, 0), LEFT(@q := @q - LEAST(qty, @q), 0))
ORDER BY id;
Run Code Online (Sandbox Code Playgroud)

sqlfiddle上看到它.