SQL查询where子句太长
Posted
技术标签:
【中文标题】SQL查询where子句太长【英文标题】:SQL query where clause is too long 【发布时间】:2011-02-25 11:51:13 【问题描述】:我写了一个 SQL 查询,在 'where' 子句中有很多 'or's:
即
"SELECT * FROM myTable WHERE col1='a' or col1='b' or col1='c'...etc"
我正在尝试通过 vb.net 在访问中运行查询,但我不断收到“查询太复杂”的错误消息。
我猜我已经达到了某个上限。除了将其分解为多个查询之外,任何人都知道解决此问题的方法吗?
【问题讨论】:
【参考方案1】:改用IN operator 怎么样?
选择字段 1、字段 2 从表 1 WHERE Field1 IN('Val1','Val2', ....)
【讨论】:
【参考方案2】:如果你查询这么简单,你会不会更好使用
SELECT * FROM myTable WHERE col1 in ('a','b','c')
但发布实际查询会有所帮助,以便我们给出准确的答案
【讨论】:
不需要。完美的解决方案。谢谢!【参考方案3】:您可以使用 SQL IN
运算符代替多个 OR
条件。
【讨论】:
很有魅力。很简单。干杯。【参考方案4】:你可以像 in 一样使用 IN -
SELECT * FROM myTable WHERE col1 IN ('a','b','c','d');
【讨论】:
【参考方案5】:许多人说您应该使用 IN 运算符,但是当它与常量一起使用时,我相信优化器只是将其转换为 OR 运算符。
相反,您可以使用常量加载一个临时表,然后然后对该表使用 IN 运算符。
【讨论】:
问题标记为ms-access,sql是通用标记,如何看到一个临时表在MS Access中工作? 我不确定幕后发生了什么,但 IN 运算符确实解决了我的问题。 @Remou:我不一定是指#table 或@table,仅用于此目的的静态表也可以。 所以,打开 Jet/ACE SHOWPLAN 看看优化器怎么说。我真的不认为它像你说的那样有效,但这是你的断言,所以我的客人并证明你是正确的。以上是关于SQL查询where子句太长的主要内容,如果未能解决你的问题,请参考以下文章