有时phpMyAdmin会生成以下查询:
SELECT *
FROM `items`
WHERE 1
LIMIT 0 , 30
我想知道WHERE 1
在这样的查询中是否有任何意义。
答案 0 :(得分:31)
没有。这意味着ALWAYS TRUE
,因此它不会对您的查询产生任何过滤影响。查询计划程序可能会忽略该子句。
通常通过连接过滤条件来构建客户端查询时使用它。
因此,如果您的基本查询存储在这样的字符串中(示例在PHP中,但它肯定适用于许多其他语言):
$sql = "select * from foo where 1 ";
然后,您可以将许多过滤条件与AND
子句连接起来,无论它是否是您使用的第一个条件:
// pseudo php follows...
if ($filter_by_name) {
$sql = $sql . " and name = ? ";
}
if ($filter_by_number) {
$sql = $sql . " and number = ? ";
}
// so on, and so forth.
答案 1 :(得分:7)
WHERE 1
是“true”或“everything”的同义词。
这是一个快捷方式,因此他们不必从生成的SQL中删除where子句。
否则,你会写这样的东西:
$sql = "SELECT * FROM `errors`";
if ($hasWhereClause == true) {
$sql .= " WHERE $whereClause";
}
$sql .= "LIMIT 0 , 30";
答案 2 :(得分:4)
我猜这是一个字符串连接假象:如果没有指定条件,则输出“1”。这样就不必决定是否输出WHERE关键字。
此外,您始终可以输出它并简单地将条件与“AND”和“OR”连接起来。您不必确定第一个条件不应该以AND,OR关键字开头。