2013-10-14 3 views
1

Я хотел бы выполнить следующее:Sqlite: Сколько параметров может быть в «в» пункта

delete from images where image_address not in (<a long list>) 

Как долго может быть в этом списке? (Я предполагаю, что мне, возможно, придется подумать о другом).

+0

Вы тоже получаете этот список из БД? –

+0

На самом деле я планировал передать его, хотя я мог бы сделать таблицу –

+0

скобки должны содержать имена колонов – preetam

ответ

1

Если вы используете параметры (?), the maximum number is 999 by default.

Если вы создаете инструкцию SQL динамически, вставляя значения непосредственно (что плохо для того, чтобы делать для строк), верхний предел на длину такого списка отсутствует. Однако есть a limit on the length of the entire SQL statement, который по умолчанию составляет миллион байт.

Если вы не можете гарантировать, что ваш запрос не превышает этих ограничений, вы должны использовать временную таблицу (см. Ответ LS_dev).

1

Если у вас есть длинный список, я хотел бы предложить два подхода:

Первое решение:

Добавить все данные во временную таблицу:

CREATE TEMP TABLE lng_list(image_address); 
-- Insert all you elements in lng_list table 
-- ... 
DELETE FROM images WHERE image_address NOT IN (SELECT image_address FROM lng_list); 

Убедитесь, что использовать эту внутреннюю транзакцию получить хорошую производительность.

Второе решение:

(УДАЛЕНО: работает только для IN, не NOT IN ...)

Performance должен быть справедливыми хорошо для любого из этих решений.

+1

Второе решение не работает для 'NOT IN'. –

+0

@CL. UPS!!! Твое право! –

+0

Спасибо @LS_dev - вы были полезны. (Принял CL, потому что он ответил и на другую часть вопроса). –

Смежные вопросы