SQL中的“WHERE 1”是什么意思?

时间:2010-09-15 18:46:04

标签: sql

有时phpMyAdmin会生成以下查询:

SELECT * 
FROM  `items` 
WHERE 1 
LIMIT 0 , 30

我想知道WHERE 1在这样的查询中是否有任何意义。

3 个答案:

答案 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关键字开头。