2012-09-12 61 views
2

我是一個全新的,從未使用的案例,所以請不要笑。爲什麼這個MySQL CASE查詢不起作用?

這個查詢爲什麼不起作用?

SELECT * 
    FROM `cronjob_reloaded` 
    WHERE `carid` LIKE '%bmw%' 
     OR `age` BETWEEN '10' AND '15' 
ORDER BY 
    CASE WHEN `carid` LIKE '%bmw%' = 1 
     THEN 1 
    CASE WHEN `age` BETWEEN '10' AND '15' = 2 
     THEN 2 

我得到這個錯誤:

Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE WHEN age BETWEEN '10' AND '15' =2 THEN 2

+2

爲什麼不起作用?你在期待什麼,你會得到什麼?請給我們一個數據,期望的輸出和你得到的輸出的例子。並請,我們不笑,我們在這裏幫忙;) –

+0

我剛剛發佈了mysql錯誤。 – webmasters

回答

4

你的語法有點奇怪。您不需要LIKE案例中的= 1案例,第二個條件具有無效的= 2,並且由於兩者都具有相同陳述的條件,因此不要重複CASE - 而是從WHEN開始第二個條件。

還建議您輸入ELSE大小寫以確定性地匹配所有其他行。下面,我插入ELSE 3,這兩個匹配條件後排序所有其他不匹配的行。

最後,整個結構應該以END關鍵字結尾。

SELECT * FROM `cronjob_reloaded` 
WHERE 
`carid` LIKE '%bmw%' 
OR 
`age` BETWEEN '10' AND '15' 
ORDER BY 
    CASE 
    WHEN `carid` LIKE '%bmw%' THEN 1 
    WHEN `age` BETWEEN '10' AND '15' THEN 2 
    /* Advisable to add an ELSE condition to catch all other rows */ 
    ELSE 3 
    END 
+0

我已經添加了END,但它沒有工作,所以語法是錯誤的。 – webmasters

+0

@webmasters確保你的看起來像我的。不僅僅是「END」。 –

+0

@webmasters對不起,我剛剛注意到在我刪除的第二個條件中有一個虛假的'= 2'。 –

2

你並不需要兩個CASE。只需添加單CASE這樣的:

ORDER BY 
CASE 
    WHEN `carid` LIKE '%bmw%' THEN 1 
    WHEN `age` BETWEEN '10' AND '15' THEN 2 
END 

你也寫carid LIKE '%bmw%' = 1這是不對的。你應該寫carid LIKE '%bmw%'

+0

'LIKE'%bmw%'= 1'是什麼意思? –

+0

@JohnWoo哎呀!複製OP的條件。我剛剛更新了'CASE'的語法。謝謝並更新了答案。 – hims056

+1

'+ 1'很好的回答! –

0

號不需要引號,你也不必在CASE WHEN= 1條件下嘗試此查詢:

SELECT * 
FROM cronjob_reloaded 
WHERE carid LIKE '%bmw%' 
     OR age BETWEEN 10 AND 15 
ORDER BY (CASE WHEN carid LIKE '%bmw%' THEN 1 
       WHEN age BETWEEN 10 AND 15 THEN 2 
     END); 
0
SELECT * FROM `cronjob_reloaded` 
WHERE 
`carid` LIKE '%bmw%' OR 
`age` BETWEEN '10' AND '15' ORDER BY 
    CASE 
    WHEN `carid` LIKE '%bmw%' = 1 THEN 1 
    WHEN `age` BETWEEN '10' AND '15' = 2 THEN 2 
    END