2014-09-12 113 views
0

我有一个可以正常使用Case语句的语法的MySQL

BEGIN 
SELECT ID, SID, SerialNumber, SerialType 
FROM orders 
WHERE paymentStatus = 'Completed' 
AND paymentSuccess = '1' 
AND VerificationStatus IS NULL 
OR VerificationStatus NOT IN ('Found', 'NotFound', 'NotVerified'); 
END 

但我需要改变它不同的基于传递到SerialType值返回一个MySQL的存储过程。我认为case语句可能是实现这一目的的最佳方法,但努力寻找正确的语法,下面的示例显示了迄今为止我尝试过的逻辑和方法。

BEGIN 
SELECT ID, SID, SerialNumber, SerialType 
FROM orders 
CASE 
    WHEN SerialType IN ('Var1','Var2') THEN 
     WHERE paymentStatus = 'Completed' AND paymentSuccess = '1'; 
    WHEN SerialType IN ('Var3','Var4') THEN 
     WHERE paymentStatus = 'Completed' AND paymentSuccess = '1' AND VerificationStatus IS NULL OR VerificationStatus NOT IN ('Found', 'NotFound', 'NotVerified'); 
END CASE 
END 
+0

你的伪代码看起来像一个UPDATE,情况会返回一个值 – Mihai 2014-09-12 11:59:26

+1

情况下不适合你正在尝试什么去做。你正在改变'WHERE'条件而不是输出。 – Bulat 2014-09-12 11:59:59

回答

1

首先,我想知道你的第一个查询确实应该:

SELECT ID, SID, SerialNumber, SerialType 
FROM orders 
WHERE paymentStatus = 'Completed' AND paymentSuccess = '1' AND 
     (VerificationStatus IS NULL OR VerificationStatus NOT IN ('Found', 'NotFound', 'NotVerified')); 

注意括号。

其次,我怀疑你只是想第二个更高级的过滤。这看起来像:

SELECT ID, SID, SerialNumber, SerialType 
FROM orders 
WHERE (SerialType IN ('Var1', 'Var2') AND paymentStatus = 'Completed' AND paymentSuccess = '1') OR 
     (SerialType IN ('Var3', 'Var4') AND paymentStatus = 'Completed' AND paymentSuccess = '1' AND 
     VerificationStatus IS NULL OR VerificationStatus NOT IN ('Found', 'NotFound', 'NotVerified') 
    ) 

这反过来,可以简化为:

WHERE paymentStatus = 'Completed' AND paymentSuccess = '1' AND 
     (SerialType IN ('Var1', 'Var2') OR 
     SerialType IN ('Var3', 'Var4') AND VerificationStatus IS NULL OR VerificationStatus NOT IN ('Found', 'NotFound', 'NotVerified') 
    ) 
1

看来你正在尝试做这样的事情:

SELECT ID, SID, SerialNumber, SerialType 
FROM orders 
WHERE paymentStatus = 'Completed' AND paymentSuccess = '1' AND 
    (SerialType IN ('Var1','Var2') 
    OR 
    (SerialType IN ('Var3','Var4') 
     AND VerificationStatus IS NULL 
     OR VerificationStatus NOT IN ('Found', 'NotFound', 'NotVerified'))) 
+0

END CASE是额外的。 – Mihai 2014-09-12 12:02:28

+0

是的谢谢,更新了答案 – Bulat 2014-09-12 12:04:18

+0

正确的答案,只落后戈登的3分钟。 – LJT 2014-09-12 12:31:43