SELECT *
FROM [productDetail]
WHERE
Price BETWEEN 0 AND 2000
OR Price BETWEEN 2000 AND 12000
AND CategoryID = 2
AND caravanOffline = 0
ORDER BY
price
查询不会产生所需的输出,它还会显示categoryID
为3等的产品。
任何人都可以在查询中发现问题。
更新的代码:
static public DataTable GetSelectedFilterMotorhomes(ArrayList caravans)
{
string sqldefault = "Select * from productDetail Where";
string sqlBuilder = "";
int starter = 0;
int count = caravans.Count;
string sqlOperator = "OR";
if (caravans.Count > 0)
{
while (count > starter) //build the query depending on the number of caravans.selected.count
{
sqlBuilder += "((Price between " + caravans[count - 1] + "))" + sqlOperator;
count--;
}
string addQuery = sqldefault + sqlBuilder;
string removeOR = addQuery.Substring(0, addQuery.Length - 2); //remove OR
string finalQuery = removeOR + "AND (CategoryID = 2) AND (caravanOffline = 0) order by Price"; //Display caravans in ascending order
SqlDataAdapter da = new SqlDataAdapter(finalQuery, ConnectionString);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
else
{
string returnAllCaravans = "Select * from productDetail WHERE CategoryID = 2 AND caravanOffline = 0";
SqlDataAdapter da = new SqlDataAdapter(returnAllCaravans, ConnectionString);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
答案 0 :(得分:3)
您可能需要一些括号?我需要确切地知道您要查询的内容,但可能需要在OR
之后使用括号,然后在CategoryID = 2
之后或caravanOffline = 0
之后再次使用括号。查看以下任一查询是否返回您要查找的内容。
Select
*
from [productDetail]
WHERE
Price between 0 AND 2000
OR (Price between 2000 AND 12000 AND CategoryID = 2) AND caravanOffline = 0
order by price
Select
*
from [productDetail]
WHERE
Price between 0 AND 2000
OR (Price between 2000 AND 12000 AND CategoryID = 2 AND caravanOffline = 0)
order by price
答案 1 :(得分:1)
我认为可能需要一些括号......
SELECT * FROM productDetail
WHERE Price BETWEEN 0 AND 2000
OR (Price BETWEEN 2000 AND 12000
AND CategoryId = 2
AND caravanOffline = 0)
ORDER BY price
假设这是你想要的逻辑!你的问题相当模糊,我假设你想要2000以下的大篷车,无论类别和大篷车离线,还是2000到12000之间的大篷车,类别为2,大篷车离线为0。
答案 2 :(得分:1)
你真的想用WHERE子句做什么?没有任何括号,根本不清楚你要选择什么
你的意思是:
WHERE
(Price BETWEEN 0 AND 2000 OR Price BETWEEN 2000 AND 12000)
AND CategoryID = 2
AND caravanOffline = 0
价格在0到2000之间,或在2000到12000之间(实际上没有意义),在任何情况下,CategoryID
都是2?
或者你的意思是:
WHERE
Price BETWEEN 0 AND 2000
OR
(Price BETWEEN 2000 AND 12000 AND CategoryID = 2 AND caravanOffline = 0)
价格在0到2000之间(没有其他限制) OR 价格在2000到12000之间,但仅当CategoryID = 2
和CaravanOffline = 0
为真时在同一时间)??
或者您正在寻找除了这两个选项之外的其他东西吗?