2012-04-23 174 views
1

我正在运行我的第一个SQL查询并不确定我的错误在哪里。第一行(日期)似乎正确运行。其他行似乎没有工作IE浏览器返回结果评级小于3.5。我在运行查询时未收到错误消息,它运行成功。如果可能的话解释我错过的'概念'。SQL语法错误

看起来这应该是一个简单的查询,它从一个表'应用程序'拉。 'rating''downloads'和'lastUpdate'是所有列。

SELECT * FROM app 
WHERE lastUpdate >= '2011-08-01' AND 
rating >= '3.5' AND 
downloads = '1 - 5' OR '10 - 50' OR '50 - 100' OR '100 - 500' 
+0

格式在SQL这些参数通常会将'和'上新的生产线,对下一个语句。没有必要或什么,只是通常的做法。 – Jasper 2012-04-23 20:57:21

+0

downloads ='1 - 5'或下载= '10 - 50'或下载= '50 - 100'或下载='100 - 500'=>您必须再次指定列 – 2012-04-23 20:57:32

+0

@KDEx John是正确的。看看他的评论。 – 2012-04-23 20:58:46

回答

4

试试这个

SELECT * FROM app 
WHERE lastUpdate >= '2011-08-01' AND 
rating >= '3.5' AND 
(downloads IN ('1 - 5','10 - 50','50 - 100','100 - 500')) 

我不知道你的语法是正确的字符串或值加在一起,如果它是你需要括号或任何该等或条件的将整个返回true查询。

+0

你也可以指出'rating'='3.5''可能不是他们想要的。 “3.5”可能需要转换为数字。 – 2012-04-23 21:11:48

3

你不能将这些ORs串在一起。试试这个替代版本:

SELECT * FROM app 
WHERE lastUpdate >= '2011-08-01' AND 
rating >= '3.5' AND 

(downloads = '1 - 5' OR 
downloads ='10 - 50' OR 
downloads ='50 - 100' OR 
downloads ='100 - 500') 

您可以使用IN子句缩短这个语法,如下所示。

downloads IN('1-5','10-50','90-100','100-500') 

这假定下载是包含像“1-5”值的VARCHAR或文本类型,它是不是一个数字,你期待这回1,2,3,4,5。

如果你指的是后者,你需要指定这样的

(downloads between 1 and 5 OR 
downloads between 10 and 50 OR 
downloads between 50 and 100 OR 
downloads between 100 and 500) 
0
SELECT * FROM app 
WHERE lastUpdate >= '2011-08-01' AND 
rating >= '3.5' AND 
(downloads between 1 AND 5 OR downloads between 10 AND 50 OR downloads between 50 AND 100 OR downloads between 100 AND 500)