Answers:
基本上,这只是为程序员提供方便,因为您可以在此之后添加其他条件AND...
,并且对执行时间没有影响。
查看以下指向Stackoverflow的链接:
注意,这WHERE 1
与WHERE 1=1
; 相同。两者都意味着,WHERE TRUE
但前者由于不是真正的布尔值而被许多数据库管理系统拒绝。
我的主要用途是,它使在查询开发过程中更容易注释掉某些内容。我以,
和and
开头:
SELECT
A
-- ,B
,C
,D
-- ,E
FROM TABLE
WHERE 1=1
-- and B='This'
and C='That'
-- and D is not null
还可以更轻松地以编程方式将内容添加到结尾。
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 "
否则,您必须限定第一个选项...,然后让每个以下选项检查先前的选项。如果用户仅在上一个示例中选择了选项D,该怎么办?您必须确保if A, B and C aren't chosen
再使用WHERE
else use and
。随着=
在一开始,你可以一巴掌预选赛语句的结束。
code
类似于SSMS或类似查询工具中的第一个块。研究数据集并获得正确的结果,然后再将其放入最终用户的报表工具(如Crystal Reports)中。第二个步骤是我见过其他人所做的事情,因为我的工作不是关于原始sql访问的。我已经给其他人类似的代码打了麻烦,并且可以理解其原因。(代码在VB,C#和PHP中)。
我在C ++ / C中为PostgreSQL编写了一堆用户定义的函数,供大型公司的其他人(超过10K的人)使用。我的函数有一个可选where
参数:如果没有给出值,则不使用该子句。明确记录了这一点。不幸的是,没有人使用此功能,每个人都只使用提供where 1=1
子句。从理论上讲这似乎是不明智的,实际上所有查询优化器都将这类语句排除在外。很难教育1万人。
WHERE 1=1; DROP TABLE CUSTOMERS
?
在这样的情况下,当我需要在运行时构造查询时,查询可能很短或很长,我使用“ where 1 = 1 AND”
string criteria =string.Empty;
if (txtc1.Text != "")
{
criteria += "criteria1=" + "'" + txtc1.Text + "' ";
}
if (txtc2.Text != "")
{
criteria += "OR criteria2=" + "'" + txtc2.Text + "' ";
}
if (ddl1.SelectedItem.Text != "")
{
criteria += "OR criteria3=" + "'" + ddl1.SelectedItem.Text + "' ";
} if (ddl2.SelectedItem.Text != "")
{
criteria += "OR criteria4=" + "'" + ddl2.SelectedItem.Text + "' ";
}
if (ddl3.SelectedItem.Text != "")
{
criteria += "OR criteria5=" + "'" + ddl3.SelectedItem.Text + "' ";
}
if (ddl4.SelectedItem.Text != "")
{
criteria += "OR criteria6=" + "'" + ddl4.SelectedItem.Text + "' ";
}
if (txtc1.Text == "")
{
//criteria = criteria.Substring(2);
criteria = criteria.Substring(2,criteria.Length-3);
}
if (criteria != string.Empty)
{
criteria = "where 1=1 AND " + criteria;
//Response.Write("<script>alert('query constructed by you is : '+'" +criteria+ "');</script>");
Response.Write(criteria);
}
使事情变得容易