1

我想执行以下操作:

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

这份清单可以有多长?(我猜我可能不得不考虑另一种方式)。

4

2 回答 2

1

如果您使用参数 ( ?),默认情况下最大数量为 999

如果您通过直接插入值来动态创建 SQL 语句(这对字符串来说是一件坏事),那么这样的列表的长度没有上限。但是,整个 SQL 语句的长度是有限制的,默认为一百万字节。

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

于 2013-10-14T10:41:58.043 回答
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...)

对于任何这些解决方案,性能都应该是相当好的。

于 2013-10-14T10:33:54.013 回答