使用SQLite IN()语句匹配任意值
我正在构建的工具的一部分涉及将用户提供的值列表插入到准备好的SQLite语句中。例如,当用户提供所需的尺寸和颜色时:使用SQLite IN()语句匹配任意值,sqlite,syntax,prepared-statement,wildcard,Sqlite,Syntax,Prepared Statement,Wildcard,我正在构建的工具的一部分涉及将用户提供的值列表插入到准备好的SQLite语句中。例如,当用户提供所需的尺寸和颜色时: SELECT * from balloons WHERE size IN ("Medium", "Large") AND color IN ("Red", "Green", "Blue"); 但是,在某些情况下,某些字段是可选的,用户可以将其留空。发生这种情况时,该工具应允许相关列上的任何值。例如,用户提供所需颜色,但希望允许任何大小: SELECT * from balloo
SELECT * from balloons WHERE size IN ("Medium", "Large") AND color IN ("Red", "Green", "Blue");
但是,在某些情况下,某些字段是可选的,用户可以将其留空。发生这种情况时,该工具应允许相关列上的任何值。例如,用户提供所需颜色,但希望允许任何大小:
SELECT * from balloons WHERE size IN (~anything~) AND color IN ("Red", "Green", "Blue");
通常,我会简单地取消对大小的限制。但是,由于SQL语句是用占位符预合成的,所以我希望避免动态解析和重写它们
是否有任何SQLite语法可以放在IN()语句中,以匹配任何值?或者,是否有一种形成这些查询的不同方式,以允许指定的值列表或任何值?或者也许我以错误的方式处理整个问题;欢迎有任何想法
提前谢谢 IN运算符始终搜索列表中的值,并且列表必须至少包含一个条目 要构造没有效果的IN,可以将列与自身进行比较:
... WHERE size IN (size) AND ...
但是完全删除IN可以加快查询速度。当列表大小更改时会发生什么情况?@CL。这很好,只有在我想要有效地删除约束并允许任何我遇到问题的情况下才行。Thanks但是不同的大小意味着一个新的预合成语句。为什么您可以更改大小,但不能删除中的?@CL.True。这是通过一个非常简单的查找/替换来实现的,它将一个
?
转换为所需的多个(?,?,?
)。我希望避免更多的解析(比如查找和删除整个IN()语句),但我怀疑这就是我必须要做的。