我正在研究同事的旧项目,发现了她的代码WHERE TRUE AND ID='1' AND STAT='1'
。我想删除,TRUE AND
以便查询成为WHERE ID='1' AND STAT='1'
并获得相同的结果。
我知道我们可以将TRUE
布尔值用作搜索“某物为真”的布尔值,WHERE FLAG = TRUE
并且此MySQL文档指出
常量TRUE和FALSE分别取值为1和0。常量名称可以用任何字母大写。
我也试过了,SELECT * FROM MYTABLE WHERE TRUE
但是和SELECT * FROM MYTABLE
TRUE
她查询的目的是什么?
它没有特定的功能目的。如果您的同事遵守特定的样式指南,该指南建议所有SELECT查询都具有显式的WHERE子句,则您的同事可能已将其包括在内。如果未提供显式的WHERE子句,则默认为选择所有行。添加始终为true的WHERE子句将具有相同的效果。
该查询可能产生的另一种方式是,它是由代码生成工具生成的,由于该代码的生成方式,该代码生成工具始终必须在WHERE子句中进行编写。
例如:
myQuery = "SELECT X FROM Y WHERE " + ConditionMet(data)?" AccountID = '" + AcctId + "'" : "1=1";
这意味着如果ConditionMet(data)为true,则仅返回AccountID与您传入的AcctId匹配的行。如果为false,则返回所有行。
添加“虚拟” 1 = 1可使代码生成器更易于编写。
同样,添加始终为假的WHERE子句(例如“ WHERE 1 = 0”)将导致返回零行。