2011-12-02 36 views
8

可能重复:
Why would someone use WHERE 1=1 AND <conditions> in a SQL clause?是否有合乎逻辑的理由在where子句中使用1 = 1?

我的工作,往往有

where 1=1

往往一个代码库,这些查询都是复杂而难以阅读。因此,纯粹针对重构来分解查询语义并不总是可行的。我的直觉是,这总是不必要的。在执行SELECT带有聚合函数以及某些列组时,可能存在对where子句的要求类似于Group By子句的要求。

有没有这种需求?

+4

是的,它是SQL注入容易的网站是非常有用的情况下,开发者) –

+0

我已经看到了SO一次或两次,这个确切的问题,可能需要要更注意您输入问题标题时出现的建议问题列表。 –

+0

其中1 = 1是一个100%的TRUE语句,所以无论你在SELECT语句中有没有行,它都会返回。 –

回答

16

这使得构建的动态WHERE子句容易...

WHERE 
    1=1 
    AND condition1 
    AND condition2 

这样,您就不用上班了如果您需要AND或不符合您的条件。你总是需要AND。

1

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

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

是的,但如果你的条件是“1 = 0”,那么你是从哪里开始的:) –

2

我已经看到了这样做,建立动态查询时,没有必须要知道从哪里开始AND条款,因为一切后WHERE 1=1

2

它的有用的,如果你动态地添加限制您的SQL ,那样你就不必关心'WHERE'关键字,并且可以在添加限制的每个部分的开始处使用'AND'。 (如果你想我可以编一个小例子来解释它。)

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

1

大多数使用它便于评论有条件的地方

相关问题