簡體   English   中英

如何讓MySQL case語句在存儲過程中工作?

[英]How to get MySQL case statement to work inside a stored procedure?

我正在嘗試使用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變體 ,但我無法工作。

問題
我究竟做錯了什么?

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

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')
    );

您不能使用CASE動態構造where子句,方法是返回條件語句,例如THEN AND ...並期望AND應用於前一個條件

你需要使用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'))
)

它不是選擇,而是存儲過程。 向下滾動您發布的頁面,您將看到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM