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子句太长的主要内容,如果未能解决你的问题,请参考以下文章

如何使用数千个 WHERE 子句优化 SQL 查询

删除 SQL 查询中 Where 子句中的条件

sql server查询性能where子句

将 SQL 查询与不同的 where 子句组合

WHERE 子句中的 OR 会降低 sql 查询性能(sql server)

SQL查询where子句如果没有匹配记录则省略