【问题标题】:Sqlite : How many parameters can there be in an 'in' clauseSqlite:“in”子句中可以有多少个参数
【发布时间】:2013-10-14 10:18:27
【问题描述】:

我想执行以下操作:

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

这个列表可以有多长? (我猜我可能不得不考虑另一种方式)。

【问题讨论】:

  • 您是否也从数据库中获得了该列表?
  • 其实我是打算传进去的,虽然我可以做个表
  • 括号应包含分号

标签: ios sql sqlite


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果您的清单很长,我会建议两种方法:

    第一个解决方案:

    将所有数据添加到临时表中:

    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...)

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

    【讨论】:

    • 谢谢@LS_dev - 你的解决方案很有帮助。 (接受 CL 是因为他也回答了问题的另一部分)。
    猜你喜欢
    • 2014-11-09
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多