为什么使用 WHERE 1 或 WHERE 1=1?

urs*_*ion 59 mysql-5.1

通常,如果查询语句中不需要条件,我们不使用WHERE子句。但是我已经看到WHERE 1在许多地方使用了一个子句,即使在其他条件不存在的情况下也是如此。

  • 为什么要这样做?
  • 执行时间有什么具体好处吗?
  • 它是否启用其他功能?
  • 使用WHERE 1=1与此类似吗?

Twi*_*les 57

基本上它只是为了程序员的方便,因为你可以在之后添加额外的条件,AND...它对执行时间没有影响。

查看 Stackoverflow 的这些链接:

请注意,这WHERE 1WHERE 1=1; 两者都意味着WHERE TRUE但前者被许多数据库管理系统拒绝,因为它不是真正的布尔值。


Wer*_*rCD 22

我的主要用途是在查询开发期间更容易注释掉内容。我以,'s 和and's 开头:

SELECT
     A
--  ,B
    ,C
    ,D
--  ,E
FROM TABLE
WHERE 1=1
--  and B='This'
    and C='That'
--  and D is not null
Run Code Online (Sandbox Code Playgroud)

还可以更轻松地以编程方式将内容添加到最后。

this  = "SELECT * "
this += "FROM TABLE "
this += "WHERE 1=1 "
if user chooses option a then this += "and A is not null "
if user chooses option b then this += "and B is not null "
if user chooses option b then this += "and C is not null "
if user chooses option b then this += "and D is not null "
Run Code Online (Sandbox Code Playgroud)

否则,您必须限定第一个选项......并让以下每个选项检查以前的选项。如果用户在前面的例子中只选择了选项 D 怎么办?你必须确保if A, B and C aren't chosen然后使用WHEREelse use and。随着=在一开始,你可以一巴掌预选赛语句的结束。


Tom*_*Tom 10

我们为什么这样做?

我想到了由不太称职的程序员编写的动态代码生成。

生成 SELECT.... WHERE 然后你必须有 SOMETHING.... 所以不是只在需要时添加 WHERE,而是在没有时添加一个非限制性条件。看到了 - 负责解雇“专家”。

或者那家伙只是强制性的东西;)

还有什么我看不到的。


art*_*hur 5

我正在用 C++/C 为 PostgreSQL 编写一堆用户定义的函数,这些函数被一家大公司的其他人(10K+ 人)使用。我的函数有一个可选where参数:如果没有给出值,则不使用该子句。这是明确记录的。不幸的是,没有人使用这个功能,每个人都只提供where 1=1条款。理论上这似乎是不明智的,实际上所有查询优化器都排除了这些类型的语句。而且很难教育10K人。

  • 实际上,教育 10,000 人很容易。当他们做错时,使应用程序失败。他们会立即停止做错事。 (6认同)
  • 没有人用 `WHERE 1=1; 调用过你的 UDF;删除表客户`? (3认同)