2009-02-05 100 views
7

我正在经历一些我正在维护的查询,一位程序员已经将“where 1 = 1”的查询放入我看来似乎总是评估为真的查询中。为什么一个sql查询会有“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语句来推动的,并在那里。一个直接的查询。

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

+0

没有目的,我可以看到,并通过接受的答案判断,看起来1 = 1的链接将被优化。可能有人做了一点cut'n'paste编程。 – 2009-02-05 18:38:42

回答

16

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

1

我见过两个原因,当你总是想有一个真正的结果,或有将是任意数量的“和条件=价值”追加到声明

6

我用这个动态where子句时,我正在做一些懒惰的编程,并不想总是检查子句是否为空,以确定我现在是否需要在我的动态子句之间使用“AND”。

4

这真的只对动态查询有意义。如果您要在循环中添加参数,而不必检查是否存在WHERE,那么您每次只能追加AND Column = Value。

10

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

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

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

这非常有趣... WHERE子句除1 = 1外什么都没有包含?我经常在SQL注入尝试中看到这种情况,其中WHERE子句设置为 xyz="something" OR 1=1; 作为一种总是返回结果列表的方式。

你能告诉我们更多关于这个查询是怎么回事,所以我们可以更好地回答这个问题吗?

  • 尼古拉斯
8

如果自动希望限制添加到您的查询,它使您的生活更轻松:

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 ...)。

相关问题