为什么有人在查询中放入“ where 1 = 1”?


Answers:


40

一些动态查询构建器包括此条件,因此可以通过添加任何“真实”条件,AND而无需进行诸如的检查if (first condition) 'WHERE' else 'AND'


查询构建器无法确定条件是行中的第一个条件,这听起来很奇怪,但是我认为您也是对的。
ern0 2011年

3
当“查询生成器”是编写代码以手动将其串联到SQL语句时,通常是这种情况。有时引入更正式的查询构建库可以消除它。
araqnid

1
我不得不像这样处理“旧”代码,这是真的。当您将整个SQL语句组合成一个字符串时,将有很多if / then或case语句可能触发也可能不会触发。由于您永远都不知道是否采用了这些代码路径,因此您在WHERE子句中嵌入了AND(由于该子句始终是字符串的一部分),因此您需要(a)删除有问题的AND或( b)只是通过逻辑上的对立。与正确编辑字符串相比,添加“ 1 = 1”更容易。
艾利·佩恩

5

如果您的程序中有许多SQL语句生成点会生成类似的查询,则可以使用此技巧将已检查的语句标记为已检查的一个。如果该句子是关于计数的,则可以使用下面的代码,以便42从SQL日志中grep出来。

select count(42) from table

4

它提供的情况总是正确的,因此不会影响结果,但是您知道WHERE子句中已经有一项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.