![](/img/trans.png)
[英]MySQL - Stored Procedure - Using a Case Expression inside Case Statement?
[英]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.