SQL中的"WHERE 1"是什么意思?

Ema*_*sev 20 sql

有时phpMyAdmin生成如下查询:

SELECT * 
FROM  `items` 
WHERE 1 
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)

I wonder if WHERE 1 has any meaning in a query like that.

Pab*_*ruz 33

它没有.这意味着ALWAYS TRUE它不会对您的查询产生任何过滤影响.查询计划程序可能会忽略该子句.

它通常在通过连接过滤条件构建客户端查询时使用.

因此,如果您的基本查询存储在这样的字符串中(示例在PHP中,但它肯定适用于许多其他语言):

$sql = "select * from foo where 1 ";
Run Code Online (Sandbox Code Playgroud)

然后,您可以将许多过滤条件与一个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.
Run Code Online (Sandbox Code Playgroud)

  • FrustratedWithFormsDesigner - 是Windows Forms还是Oracle Forms? (2认同)

Pau*_*ber 8

WHERE 1 是"真实"或"一切"的同义词.

这是一个快捷方式,因此他们不必从生成的SQL中删除where子句.

否则,你会写这样的东西:

$sql = "SELECT * FROM `errors`";
if ($hasWhereClause == true) {
  $sql .= " WHERE $whereClause";
}
$sql .= "LIMIT 0 , 30";
Run Code Online (Sandbox Code Playgroud)