为什么sql查询有“where 1 = 1”

时间:2009-02-05 18:08:07

标签: sql where-clause

我正在处理一些我正在维护的查询,并且程序员已经向我提出了“其中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')

没有编程或是否有语句可以推送到那里。直接查询。

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

7 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:10)

如果你动态构建一个where子句,你可能有点懒惰,并假设你添加的每个子句都可以加上前缀“AND”,例如:

$str="select foo from bar where 1=1";

if ($filter1)
{
    $str.=" and col1='frobozz'";
}

答案 2 :(得分:10)

如果您自动希望为查询添加限制,则可以让您的工作更轻松:

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 ...),或者您之前是否添加了其他限制(然后添加{{1} }})。

答案 3 :(得分:6)

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

答案 4 :(得分:4)

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

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

  • 尼古拉斯