在 MySQL 中,CASE..WHEN 構造允許使用者評估多個條件並傳回對應的結果。然而,當使用具有搜尋條件和數字列的 CASE 時,會出現一個常見問題。
原始查詢與問題:
在查詢中,CASE 語句評估base_price列,其中base_price定義為decimal(8,0):
SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1 ... ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0;
此查詢的結果傳回意外結果,其中所有選取行(base_price 為0)傳回條件3:
3 0 3 0 3 0 3 0 3 0
解決方案:
要修正此問題,CASE 後的列規範應刪除。在 CASE 的第二種形式中,如果使用搜尋條件,CASE 一詞後面不需要列名。
SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 ... ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0;
說明:
CASE 有兩種不同的forms:第一種形式指定列名,而第二種形式則不指定。在評估搜尋條件時正確使用第二種形式可以讓 MySQL 正確評估條件並傳回預期結果。
以上是如何在 MySQL 中正確使用 CASE WHEN 與數字列和搜尋條件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!