【问题标题】:Why would a sql query have "where 1 = 1" [duplicate]为什么 sql 查询会有“where 1 = 1”[重复]
【发布时间】:2010-10-05 18:00:54
【问题描述】:

我正在处理一些我正在维护的查询,一个程序员向我输入了“where 1=1”的查询,这似乎总是评估为真。

这样做有什么好处吗?

重复: Why would someone use WHERE 1=1 AND in a SQL clause?

那个问题不是这个问题的答案。

Where 子句:

select * from table where 1=1 and sStatus not in ('status1','status2','status3')

无需编程或 if 语句将 and 推入其中。直接查询。

如果你可以取消关闭它,我想知道是否有一个目的,以便我可以重写并删除 1=1 如果没有必要。

【问题讨论】:

  • 我看不到任何目的,从链接中接受的答案来看,似乎 1=1 将被优化。可能有人做了一点剪切和粘贴编程。

标签: sql where-clause


【解决方案1】:

如果您想自动为查询添加限制,它会让您的生活更轻松:

string sql = "SELECT * FROM table WHERE 1=1";

if (someflag) {
  sql += " AND valid = 1";
}

if (someotherflag) {
  sql += " AND special = 1";
}

execute(sql);

如果没有WHERE 1 = 1,您在每种情况下都必须检查它是您添加的第一个限制(然后使用WHERE ...),还是您之前已经添加了一些其他限制(然后添加AND ...)。

【讨论】:

    【解决方案2】:

    这很有趣... WHERE 子句只包含 1=1?我在 SQL 注入尝试中经常看到这种情况,其中 WHERE 子句设置为 xyz="something" OR 1=1; 作为一种始终返回结果列表的方法。

    您能否告诉我们更多有关此查询的情况,以便我们能够更好地回答这个问题?

    • 尼古拉斯

    【讨论】:

      【解决方案3】:

      如果您正在动态构建 where 子句,您可能会有点懒惰,并假设您添加的每个子句都可以以“AND”为前缀,例如

      $str="select foo from bar where 1=1";
      
      if ($filter1)
      {
          $str.=" and col1='frobozz'";
      }
      

      【讨论】:

        【解决方案4】:

        这真的只在动态查询中才有意义。如果您在循环中添加参数而不必检查是否已经存在 WHERE,您可以每次都附加 AND Column = Value。

        【讨论】:

          【解决方案5】:

          当我在做一些惰性编程并且不想总是检查子句是否为空来确定我现在是否需要动态子句之间的“AND”时,我将它用于动态 where 子句。

          【讨论】:

            【解决方案6】:

            我已经看到了两个原因,当你总是想要一个真实的结果时,或者当语句中附加任意数量的“and condition = value”时

            【讨论】:

              【解决方案7】:

              是动态查询吗?有时这在基于可选参数构建动态查询时很有帮助。

              【讨论】:

                猜你喜欢
                • 2017-07-25
                • 2014-08-24
                • 2010-09-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多