在 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中文网其他相关文章!