【问题标题】:SQL query where clause is too longSQL查询where子句太长
【发布时间】: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 在访问中运行查询,但我不断收到“查询太复杂”的错误消息。

我猜我已经达到了某个上限。除了将其分解为多个查询之外,任何人都知道解决此问题的方法吗?

【问题讨论】:

    标签: sql vb.net ms-access


    【解决方案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 看看优化器怎么说。我真的不认为它像你说的那样有效,但这是你的断言,所以我的客人并证明你是正确的。
        猜你喜欢
        • 2011-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多