sql和多个where查询
我有一个输入屏幕,可以容纳8个输入值。输入值如下所示sql和多个where查询,sql,Sql,我有一个输入屏幕,可以容纳8个输入值。输入值如下所示 tCustomerIDStart - tCustomerIDEnd tProjectIDStart - tProjectIDEnd tDateStart - tDateEnd tProjectStatusStart - tProjectStatusEnd 一旦用户在我的表单上单击submit,我想对我的SQLite数据库执行查询。下面的查询是我想要的内容的基本概述,但是如果用户只输入一对搜索条件,例如tDateStart-TDATEND
tCustomerIDStart - tCustomerIDEnd
tProjectIDStart - tProjectIDEnd
tDateStart - tDateEnd
tProjectStatusStart - tProjectStatusEnd
一旦用户在我的表单上单击submit,我想对我的SQLite数据库执行查询。下面的查询是我想要的内容的基本概述,但是如果用户只输入一对搜索条件,例如tDateStart-TDATEND,我不太确定如何构造查询。我可以让查询省略其他子句吗?WHERE语句中的第一个子句在调用其他子句之前是否必须求值为true。如果填充了所有字段,我可以构造一个查询,主要是使用WHERE语法,然后使用and来构建子句。但是,sql是否可以忽略一对空的搜索条件字段
"SELECT project.start_date, project.projectID, project.project_title, customer.customer, " &\
"project.end_date, project.project_manager, project_status.project_status " &\
"FROM project " &\
"LEFT JOIN customer " &\
"ON project.customerID=customer.customerID " &\
"LEFT JOIN project_status " &\
"ON project.project_statusID=project_status.project_statusID " &\
"WHERE project.projectID BETWEEN " & tProjectIDStart & " AND " & tProjectIDEnd & " " &\
"OR customer.customerID BETWEEN " & tCustomerIDStart & " AND " & tCustomerIDEnd & " " &\
"OR project.project_status_id BETWEEN " & tStatusIDStart & " AND " & tStatusIDEnd & " " &\
"OR project.start_date >= " & tDateStart & " AND " & tDateEnd & " " &\
"ORDER BY date(project.start_date) ASC "
只需根据这些值是空还是空来构建查询 如果你从where开始的时候总是正确的,比如
1=1
,那么你只需应用其他过滤器,然后从和
开始
sql = "SELECT project.start_date, project.projectID, project.project_title, customer.customer, " &\
"project.end_date, project.project_manager, project_status.project_status " &\
"FROM project " &\
"LEFT JOIN customer " &\
"ON project.customerID=customer.customerID " &\
"LEFT JOIN project_status " &\
"ON project.project_statusID=project_status.project_statusID " &\
"WHERE 1=1 "
if (tProjectIDStart != "" And tProjectIDEnd != "")
{
sql = sql & " AND project.projectID BETWEEN " & tProjectIDStart & " AND " & tProjectIDEnd & " "
}
etc..
sql = sql & "ORDER BY date(project.start_date) ASC "
谢谢,这是一个很好的方法