2014-09-12 116 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