我见过一些程序员在选择查询的条件中使用1 = 0,为什么他们使用这个条件。
答案 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;
之类的操作。