Моя первая реакция будет: Почему сделай это? Какова ваша мотивация? Просто избегая SQL-циклов или у вас есть какие-то операционные проблемы, которых вы хотите избежать?
Ваш точный запрос не так просто преобразовать в один запрос, потому что у вас есть кортежи ID
и Order
значения, которые должны совпадать, чтобы их можно было удалить. Также обратите внимание, что подготовленные заявления обычно не принимают произвольное количество параметров, поэтому даже если вы сможете преобразовать свой запрос в форму DELETE FROM table WHERE (ID=1 AND Order=1000) OR (ID=4 AND Order=1234)...
, вам нужно как-то понять, как заполнить первую, вторую, третью. .. местозахват. Кроме того, вы вынуждены генерировать этот подготовленный оператор динамически, что, вероятно, противоречит тому, как должны быть подготовлены инструкции, когда дело касается безопасности.
Если у вас проблемы с производительностью, так как удаление 1000 записей один за другим имеет большое влияние, есть альтернативы: если вы завершаете удаление внутри одной транзакции, то, вероятно, не имеет значения, сколько записей вы удаляете - ВСЕ из них будут удалены после совершения транзакции. Также обратите внимание, что использование подготовленных операторов является одним из способов ускорить операции с базой данных - но только если вы подготовите их только один раз перед циклом, и внутри цикла вы будете снова и снова передавать новые параметры.
Итак, чтобы обернуть это: Отмена SQL в цикле - это не лучшая вещь, если проблема программирования, которую вы хотите решить, лучше решить с помощью цикла, и нет никакой другой проблемы, связанной с ней. Если, однако, есть такая проблема, ее нужно проанализировать и упомянуть - удаление петель - это не автоматическая история успеха.
Я бы рекомендовал: -http: //stackoverflow.com/a/4639672/4248328. даже это также может применяться для подачи заявления –
- ваш идентификатор уникален или нет? –
Нет, может быть много строк с этим полем id –