2012-06-19 90 views
0

我正在嘗試使用MySQL CASE語句從產品表中選擇產品。如何讓MySQL case語句在存儲過程中工作?

我有這樣的:

SELECT art.a,art.b,art.c 
FROM products AS art 
    WHERE art.inventory != "0" 
    # filter by param_reference_iln (seller ID = vARCHAR(13)) 
    CASE   
    WHEN param_reference_iln = '3333333333333' THEN AND art.iln = '1111111111111' OR art.iln = '2222222222222' 
    WHEN param_reference_iln = '8888888888888' THEN AND art.iln = '7777777777777' 
    ELSE AND art.iln NOT IN ('1111111111111','2222222222222','7777777777777') 
    END CASE; 

我曾經嘗試都CASE variants,但我不能讓任何工作。

問題
我在做什麼錯?

+3

修復您的查詢,幾個語法錯誤。在'CASE'前面缺少'AND','THEN AND'也是不可能的,也許更多... – fancyPants

+0

如果param_reference_iln的值是3333333333333或8888888888888,你想要做什麼?你想從你的查詢返回什麼? – neeraj

+1

*無法上手*不是有效的MySQL錯誤消息。 –

回答

1

我不確定您可以在WHERE子句中擁有CASE。 無論如何,你應該使用一個嚴格的布爾syntaxe這裏:

SELECT art.a,art.b,art.c 
FROM products AS art 
WHERE art.inventory != "0" 
    AND (
     (param_reference_iln = '3333333333333' AND (art.iln = '1111111111111' OR art.iln = '2222222222222')) 
     OR 
     (param_reference_iln = '8888888888888' AND art.iln = '7777777777777') 
     OR 
     art.iln NOT IN ('1111111111111','2222222222222','7777777777777') 
    ); 
+0

謝謝!那麼多......我正在拼命尋找如何讓這個工作。 – frequent

0

這不是用於選擇,而是用於存儲過程。向下滾動您發佈的頁面,您將看到

+0

對不起,我正在嘗試這storedproc裏面。編輯問題。謝謝! – frequent

1

您不能使用CASE通過讓它返回的條件語句,如THEN AND ...和期待AND動態地構造一個where子句適用於前述條件

您需要使用vanilla內聯邏輯;

WHERE art.inventory != "0" 
AND (
    (param_reference_iln = '3333333333333' AND art.iln IN ('1111111111111', '2222222222222')) 
    OR 
    (param_reference_iln = '8888888888888' AND art.iln = '7777777777777') 
    OR 
    (art.iln NOT IN ('1111111111111','2222222222222','7777777777777')) 
) 
+0

好的。理解。感謝您的解釋。 – frequent