2010-03-25 64 views
2

我想根據表結果的計數返回一個數字,並避免必須在IF語句中計算兩次結果,我使用的是子查詢。但是,當我嘗試運行查詢時出現語法錯誤,我自己測試的子查詢運行良好。來自子查詢的MySQL查詢不起作用

任何想法查詢有什麼問題?語法是正確的我

SELECT IF(daily_count>8000,0,IF(daily_count>6000,1,2)) 
FROM (
    SELECT count(*) as daily_count 
    FROM orders201003 
    WHERE DATE_FORMAT(date_sub(curdate(), INTERVAL 1 DAY),"%d-%m-%y") = 
    DATE_FORMAT(reqDate,"%d-%m-%y") 
) q 

錯誤消息我得到的是:

您的SQL語法錯誤。 檢查對應 你的MySQL服務器版本使用附近的 正確的語法手冊「SELECT COUNT(*)作爲daily_count FROM orders201003

+0

你能否發表你的語法錯誤? – Quassnoi 2010-03-25 13:01:04

+0

@Quassnoi,更新錯誤信息 - 不知道它是多麼有幫助。 – 2010-03-25 13:02:43

回答

3
SELECT CASE WHEN daily_count > 8000 THEN 0 WHEN daily_count > 6000 THEN 1 ELSE 2 END 
FROM (
     SELECT count(*) as daily_count 
     FROM orders201003 
     WHERE DATE_FORMAT(date_sub(curdate(), INTERVAL 1 DAY),"%d-%m-%y") = 
       DATE_FORMAT(reqDate,"%d-%m-%y") 
     ) AS q 

還要注意的是,嵌套查詢只支持從MySQL 4.1開始。

+0

@Quassnoi使用'CASE'而不是'IF'時它應該有所作爲嗎? – 2010-03-25 13:04:01

+0

@詹姆斯:不,這個更清晰。你使用哪種MySQL版本?嘗試在查詢別名之前添加「AS」,這可能是舊版本所必需的。 – Quassnoi 2010-03-25 13:09:20

+0

版本是4.0.21,只是發現它不支持子查詢:( – 2010-03-25 13:15:55