通常,如果查询语句中不需要条件,我们不使用WHERE子句。但是我已经看到WHERE 1在许多地方使用了一个子句,即使在其他条件不存在的情况下也是如此。
WHERE 1=1与此类似吗?Twi*_*les 57
基本上它只是为了程序员的方便,因为你可以在之后添加额外的条件,AND...它对执行时间没有影响。
查看 Stackoverflow 的这些链接:
请注意,这WHERE 1与WHERE 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,而是在没有时添加一个非限制性条件。看到了 - 负责解雇“专家”。
或者那家伙只是强制性的东西;)
还有什么我看不到的。
我正在用 C++/C 为 PostgreSQL 编写一堆用户定义的函数,这些函数被一家大公司的其他人(10K+ 人)使用。我的函数有一个可选where参数:如果没有给出值,则不使用该子句。这是明确记录的。不幸的是,没有人使用这个功能,每个人都只提供where 1=1条款。理论上这似乎是不明智的,实际上所有查询优化器都排除了这些类型的语句。而且很难教育10K人。
| 归档时间: |
|
| 查看次数: |
205078 次 |
| 最近记录: |