Я просмотрел все связанные вопросы, которые я нашел, но не смог получить тот, который ответит мне.Mysql Обновление одного столбца из нескольких строк в одном запросе
я получил таблицу, как это:
id | name | age | active | ...... | ... |
где «идентификатор» является первичным ключом, а ... значит есть что-то вроде 30 столбцов. «активный» столбец имеет тип tinyint.
Моя задача:
Update идентификаторы 1,4,12,55,111 (те, которые просто пример, это может быть 1000 различных идентификатор в целом) с активным = 1 в одном запросе.
я сделал:
UPDATE table SET active = 1 WHERE id IN (1,4,12,55,111)
его внутри транзакции, потому что я что-то еще в этом процессе обновления.
двигатель InnoDB
Моей проблема:
Кто-то сказало мне, что делать такой запрос эквивалентно 5 запросов на выполнении, вызывает IN переведет к а заданное число OR, и запускать их один за другим.
В конечном итоге вместо 1 я получаю N, который является номером в IN.
Он предлагает создать временную таблицу, вставить в нее все новые значения и затем обновить путем объединения.
Он прав? как эквивалентности, так и производительности.
Что вы предлагаете? я думал, что INSERT INTO .. ON DUPLICATE UPDATE поможет, но у меня нет всех данных для строки, только его id и что я хочу установить на нем active = 1.
Возможно, этот вопрос лучше?
UPDATE table SET
active = CASE
WHEN id='1' THEN '1'
WHEN id='4' THEN '1'
WHEN id='12' THEN '1'
WHEN id='55' THEN '1'
WHEN id='111' THEN '1'
ELSE active END
WHERE campaign_id > 0; //otherwise it throws an error about updating without where clause in safe mode, and i don't know if i could toggle safe mode off.
Спасибо.
Да, он прав или существует. Обновить таблицу set active = 1, где Exists (выбрать 1 из таблицы2, где ...) –