我想使用一个简单的查询来减少表中的值,如下所示:
UPDATE `Table`
SET `foo` = `foo` - 1
WHERE `bar` IN (1, 2, 3, 4, 5)
这在上面的示例中效果很好,其中 IN
列表仅包含唯一值,因此每个匹配行的 foo
列都会减 1。
问题是当列表包含重复项时,例如:
UPDATE `Table`
SET `foo` = `foo` - 1
WHERE `bar` IN (1, 3, 3, 3, 5)
在这种情况下,我希望 bar
为 3
的行递减三倍(或递减三),并且 1
和5
减 1。
有没有办法改变行为,或者我可以使用替代查询来获得所需的行为?
我专门使用 MySQL 5.7,以防有任何 MySQL 特定的解决方法有用。
更新:我正在用脚本语言构建查询,所以请随意提供在运行查询之前执行任何额外处理的解决方案(可能作为伪代码,对越多越好?)。我不介意这样做,我只是想在给出预期结果的同时使查询尽可能简单。
最佳答案
如果您可以先处理原始列表以获得计数,则可以动态构造这种查询:
UPDATE `Table`
SET `foo` = `foo` - CASE `bar` WHEN 1 THEN 1 WHEN 3 THEN 3 WHEN 5 THEN 1 ELSE 0 END
WHERE `bar` IN (1, 3, 5)
;
注意:ELSE 只是彻底/偏执; WHERE 应该阻止它走那么远。
关于mysql - 在 WHERE … IN 中启用重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53306361/