Sqlite:'in'子句中可以有多少个参数

时间:2013-10-14 10:18:27

标签: ios sql sqlite

我想执行以下操作:

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

此列表可以使用多长时间? (我猜我可能要考虑另一种方式)。

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

如果您不能保证您的查询不超过这些限制,您必须使用临时表(请参阅LS_dev的答案)。