在sql server&中使用Select查询的问题asp.net

时间:2011-05-31 10:55:07

标签: asp.net sql select

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;
    }

}

3 个答案:

答案 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 = 2CaravanOffline = 0为真时在同一时间)??

或者您正在寻找除了这两个选项之外的其他东西吗?