为什么我们在查询中给出sql 1 = 0

时间:2010-12-17 17:39:26

标签: mysql

我见过一些程序员在选择查询的条件中使用1 = 0,为什么他们使用这个条件。

5 个答案:

答案 0 :(得分:15)

在sql server中,您可以快速创建一个没有任何数据的表的副本

select * into Newtable
from Oldtable
where 1 = 0

这将创建一个与旧表格结构相同的新表格

另一种选择是返回一个空的结果集

答案 1 :(得分:6)

唯一可能的用途是阻止查询返回任何行。我偶尔也会用它来测试“找不到结果”的类型逻辑。

答案 2 :(得分:4)

我见过一些实用程序使用该语法来收集有关表的元数据。他们可以运行select * from sometable where 1=0之类的查询来“高效”地从表中获取没有任何数据的列。

答案 3 :(得分:0)

在基于复选框值列表生成SQL时,我在代码中使用了它。例如,如果我允许用​​户从水果列表中选择:

苹果 桔子 梨

...他们选择苹果和橘子,我的伪代码如下:

string sqlWhere = "select * from fruit where 1 = 0"
if (FruitList.Any()) {
   sqlWhere += " or code in ("
   foreach (Fruit in FruitList)
      sqlWhere += string.Format("'{0}',");
   /*Add the close parens*/
   sqlWhere = sqlWhere.Substring(0,sqlWhere.Length-2) + ")";
}

只会返回用户选择的值。如果他们没有选择任何水果,则不会返回任何结果。

*请注意,此代码不考虑SQL注入。这只是为什么你可能会看到

的一个例子
where 1 = 0

答案 4 :(得分:0)

您可以使用像这样的查询作为'ping'来检查您与数据库的连接是否仍然打开并且数据库是否健康等等 - 如果您没有得到结果,那么它是,但如果您得到某种排序错误,有一个问题。您将针对某种系统表编写查询。根据您的数据库,您可以做一些更简单的事情 - 在PostgreSQL中,您可以说select 1;,在Oracle中,我看到select 1 from dual;。如果您的数据库无法处理选择中的自由浮动表达式,并且没有等效的双重表达式,则可以执行select * from sometable where 0 = 1;之类的操作。