繁体   English   中英

案例语句语法MySQL

[英]Case statement syntax MySQL

我有一个运行良好的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的值来不同地返回。 我认为,使用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

看来您正在尝试执行以下操作:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM