#mysql
Вопрос:
У меня есть запрос на обновление, который выглядит примерно так:
UPDATE table SET xyz = 'abc', updated_at = '2021-09-27 23:00:00' WHERE external_id NOT IN (1, 2, 3...);
Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что в предложении WHERE слишком много значений (около 50000).
Это приводит к тому, что я получаю следующую ошибку:
Подготовленный отчет содержит слишком много заполнителей
Если бы не тот факт, что он удаляется на основе значения, которого нет в списке, я бы разделил значения на меньшие размеры.
Есть какие-нибудь идеи, как я могу это обойти?
Комментарии:
1. Это и есть настоящий запрос, который вы посылаете? Заполнителей не существует.
2. Вероятно
IN
, вместо этого попробуйте присоединиться
Ответ №1:
Создайте временную таблицу, содержащую все идентификаторы, которые вы хотите ограничить. Добавьте индекс в столбец таблицы. Затем используйте
UPDATE table
SET xyz = 'abc', updated_at = '2021-09-27 23:00:00'
WHERE external_id NOT IN (SELECT id FROM temporary_table);