2013-10-14 27 views
1

我想执行以下操作:SQLite的:有多少参数可以有处于“在”子句

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

该列表能够维持多久? (我猜我可能不得不想另一种方式)。

+0

你是否也从数据库中获得该列表? –

+0

其实我打算通过它,虽然我可以创建一个表 –

+0

括号应该包含coloun名称 – preetam

回答

1

如果您正在使用参数(?),the maximum number is 999 by default

如果您通过直接插入值来动态创建SQL语句(这对字符串来说是一件坏事),那么这样的列表的长度没有上限。但是,有a limit on the length of the entire SQL statement,默认为100万字节。

如果您不能保证您的查询没有超出这些限制,您必须使用临时表(请参阅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 ...)

性能应该是任何这些解决方案的公平良好。

+1

第二个解决方案对于'NOT IN'不起作用。 –

+0

@CL。 UPS!!!你的权利! –

+0

谢谢@LS_dev - 你的解决方案很有帮助。 (接受CL,因为他也回答了问题的其他部分)。 –

相关问题