Я хочу использовать простой запрос для уменьшения значения в таблице, например:
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.
Обновление : я строю запрос на языке сценариев, поэтому не стесняйтесь предлагать решения, которые выполняют любую дополнительную обработку перед выполнением запроса (возможно, в виде псевдокода, чтобы быть столь же полезным для сколько возможно?). Я не возражаю против этого, я просто хочу максимально упростить запрос и дать ожидаемый результат.