【问题标题】:What does "WHERE 1" mean in SQL?SQL 中的“WHERE 1”是什么意思?
【发布时间】:2011-04-12 20:29:16
【问题描述】:

有时 phpMyAdmin 会生成如下查询:

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

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

【问题讨论】:

  • 这样做的原因很简单——如果你动态生成一个查询字符串,更容易声明它总是正确的,而不是有一个特殊情况重新排列语句以删除'WHERE ' 子句,当不需要它时。
  • 特别是在PHP中,通过将字符串连接在一起来构造SQL语句是很常见的。所以大概在 phpMyAdmin 他们有 $sql = "SELECT * FROM item WHERE " 。 $whereClause 他们在其他地方定义了 $whereClause 变量。解决您实际上不需要 where 子句的问题的一种(粗略)方法是使用此技术。
  • phpmyadmin 也将始终使用 LIMIT,即使在不需要它的情况下,出于同样的原因。

标签: sql


【解决方案1】:

它没有。这意味着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.

【讨论】:

  • 嗯,听起来 phpMyAdmin 查询生成器宁愿总是有一个 WHERE 子句,而不是在没有条件时删除它。
  • FrustratedWithFormsDesigner - 是 Windows Forms 还是 Oracle Forms?
  • @Frank: 或 WebForms。好吧,反正他们都很烂。 :)
【解决方案2】:

WHERE 1 是“真实”或“一切”的同义词。

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

否则,你会这样写:

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

【讨论】:

    【解决方案3】:

    我猜这是一个字符串连接伪像:如果没有指定 where 条件,则输出“1”。这样就不必决定是否应该输出 WHERE 关键字。

    您也可以随时输出它并简单地将条件与“AND”和“OR”连接起来。您不必决定第一个条件不应以 AND、OR 关键字开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 2010-12-28
      • 2021-11-16
      • 2016-10-12
      • 1970-01-01
      相关资源
      最近更新 更多