2012-04-23 209 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)