【问题标题】:Is there ever a logical reason to use 1=1 in a where clause? [duplicate]在 where 子句中使用 1=1 是否有合理的理由? [复制]
【发布时间】:2012-01-11 16:14:25
【问题描述】:

可能重复:
Why would someone use WHERE 1=1 AND <conditions> in a SQL clause?

我正在编写一个经常有的代码库

where 1=1

通常,这些查询很复杂且难以阅读。因此,仅仅为了重构而分解查询语义并不总是可行的。我的直觉是,这总是不必要的。在执行SELECT 时,可能存在对 where 子句的要求,类似于对 Group By 子句的要求,其中包含要分组的某个列旁边的聚合函数。

有这个需求吗?

【问题讨论】:

  • 是的,它对容易发生 sql 注入的网站非常有用;)
  • 我在 SO 上看到过这个确切的问题一两次,可能需要更多地注意输入问题标题时出现的建议问题列表。
  • 其中 1=1 是 100% 正确的语句。因此,无论您在 SELECT 语句中是否有行,都将返回。

标签: sql


【解决方案1】:

大多数案例开发人员使用它来方便地注释 where 条件

【讨论】:

    【解决方案2】:

    如果您向 SQL 动态添加限制,这很有用,这样您就不必关心“WHERE”关键字,并且可以在添加限制的每个部分的开头使用“AND”。 (如果你愿意,我可以编写一个小例子来解释它。)

    所以,是的,1=1 有合法用途。

    【讨论】:

      【解决方案3】:

      我已经看到这样做了,因此在构建动态查询时,您不必知道从哪里开始 AND 子句,因为一切都在 WHERE 1=1 之后

      【讨论】:

        【解决方案4】:

        它使构建动态 WHERE 子句更容易...

        WHERE
          1=1
          AND condition1
          AND condition2
        

        这样您就不必在添加条件时确定是否需要 AND。你总是需要AND。

        【讨论】:

          【解决方案5】:

          我认为这与能够编写长 WHERE 子句而不必考虑虚假的 AND 语句有关。换句话说,它只是为了让代码看起来更漂亮。很肯定会得到优化。但是,如果前面有 OR,那就是 SQL 注入的味道 :)

          SELECT
          ...
          WHERE 1=1
          AND COND
          AND ANOTHERCOND
          AND THIRDCOND
          -- AND COMMENTEDOUT
          AND FIFTHCOND
          

          【讨论】:

          • 是的,但是如果你有条件“1 = 0”的 OR 是你开始的:)
          猜你喜欢
          • 2013-04-06
          • 2014-08-07
          • 1970-01-01
          • 2011-10-22
          • 1970-01-01
          • 2015-04-29
          • 2010-09-19
          • 1970-01-01
          相关资源
          最近更新 更多