什么是;其中1“;在SQL中是什么意思?

什么是;其中1“;在SQL中是什么意思?,sql,Sql,有时phpMyAdmin会生成如下查询: SELECT * FROM `items` WHERE 1 LIMIT 0 , 30 我想知道WHERE 1在这样的查询中是否有任何意义。它没有。这意味着始终为TRUE,因此它不会对您的查询产生任何过滤影响。查询计划器可能会忽略该子句 通常在通过串联过滤条件构建客户端查询时使用 因此,如果基本查询存储在如下字符串中(示例是PHP,但它肯定适用于许多其他语言): 然后,您可以使用和子句连接许多过滤条件,而不管它是否是您使用的第一个条件: // p

有时phpMyAdmin会生成如下查询:

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

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

它没有。这意味着
始终为TRUE
,因此它不会对您的查询产生任何过滤影响。查询计划器可能会忽略该子句

通常在通过串联过滤条件构建客户端查询时使用

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

然后,您可以使用
子句连接许多过滤条件,而不管它是否是您使用的第一个条件:

// 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
是“真”或“一切”的同义词

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

否则,您将编写如下内容:

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

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


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

Hmm听起来phpMyAdmin查询生成器宁愿始终有WHERE子句,也不希望在没有条件时删除它。FrustratedWithFormsDesigner-这是Windows窗体还是Oracle窗体?@Frank:或WebForms。好吧,反正他们都很烂。:)原因很简单-如果您动态生成查询字符串,那么声明它始终为真要比在不需要时使用特殊情况重新排列语句以删除“WHERE”子句更容易。特别是在PHP中,通过将字符串串联在一起来构造SQL语句更常见。因此,在phpMyAdmin中可能有$sql=“SELECT*FROM
item
WHERE”$where子句,他们在别处定义了$where子句变量。解决实际不需要where子句的问题的一种(粗略的)方法是使用这种技术。phpmyadmin也将始终使用LIMIT,即使在没有必要的情况下,出于同样的原因。
$sql = "SELECT * FROM `errors`";
if ($hasWhereClause == true) {
  $sql .= " WHERE $whereClause";
}
$sql .= "LIMIT 0 , 30";