2014-07-08 90 views
3

我有一個包含像這樣的CASE表達式語句的過程:如何在MySQL CASE表達式中使用「OR」條件?

BEGIN 
.... 
WHILE counter < total DO 
.... 

CASE ranking 
    WHEN 1 OR 51 OR 100 OR 167 THEN SET 
    project_name = 'alpha'; 
    WHEN 2 THEN SET 
    project_name = 'beta'; 
    WHEN 10 OR 31 OR 40 OR 61 THEN SET 
    project_name = 'charlie'; 
    .... 
    ELSE SET 
    project_name = 'zelta'; 
END CASE; 

INSERT INTO project (id, name) VALUES (LAST_INSERT_ID(), project_name); 
SET counter = counter + 1; 

END WHILE; 
END 
$$ 
DELIMITER ; 

當我調用上面的過程,與OR陳述案件或者完全跳過或只在列表中的第一個項目匹配。我究竟做錯了什麼?

+2

我認爲這個問題可以幫助你。 http://stackoverflow.com/questions/5487892/sql-server-case-when-or-then-else-end-the-or-is-not-supported – Alfaplus

+1

我們不能使用IN查詢像WHEN IN (1,51,100,167) – sumit

回答

1
CASE ranking 
    WHEN 1 THEN 'alpha' 
    WHEN 2 THEN 'beta' 
    WHEN 10 THEN 'charlie' 
    ELSE 'zelta' 
END CASE; 

您可以使用WHEN有的表達之一,但不能混合使用它們。

1)何時when_expression 是使用簡單CASE格式時比較input_expression的簡單表達式。 when_expression是任何有效的表達式。 input_expression和每個when_expression的數據類型必須相同或者必須是隱式轉換。

2)WHEN布爾表達式 是使用搜索的CASE格式時評估的布爾表達式。 Boolean_expression是任何有效的布爾表達式。

你可以計劃:

1)

CASE ProductLine 
     WHEN 'R' THEN 'Road' 
     WHEN 'M' THEN 'Mountain' 
     WHEN 'T' THEN 'Touring' 
     WHEN 'S' THEN 'Other sale items' 
     ELSE 'Not for sale' 

2)

CASE 
     WHEN ListPrice = 0 THEN 'Mfg item - not for resale' 
     WHEN ListPrice < 50 THEN 'Under $50' 
     WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250' 
     WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000' 
     ELSE 'Over $1000' 
     END 

但在任何情況下,你可以想到的是,Alexa排名查詢是要在一個布爾expresion進行比較。

http://msdn.microsoft.com/en-us/library/ms181765.aspx

+1

我認爲如果你爲你的意圖添加一個解釋,這對OP和更多的訪問者會更有幫助。 – reporter

+0

感謝上面的有用鏈接。正如記者所指出的那樣,目前的答案並沒有解釋什麼,也沒有正確編碼。如果你想獲得一些聲望點,試着改進它。 –

+0

已更新。謝謝你的建議。我是這個世界的新人。 – Alfaplus