«Подготовленное утверждение содержит слишком много заполнителей» в запросе на обновление с использованием WHERE НЕ В

#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);