在 MySQL 中正确使用 CASE..WHEN 语句
在 MySQL 中,CASE..WHEN 语句允许您评估不同的条件和值根据每个条件返回特定结果。但是,正确使用它以避免意外结果很重要。
问题:
当执行 CASE..WHEN 语句来获取 base_price 为 0 的记录时,为什么选择值为 3 的条件而不是第一个条件,即使指定的值为0?
答案:
问题出在CASE语句的语法上。在提供的查询中:
SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price < 101 THEN 2 WHEN course_enrollment_settings.base_price > 100 AND course_enrollment_settings.base_price < 201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0
语句评估条件并返回第一个匹配条件。但是,语法不正确,因为列名 course_enrollment_settings.base_price 在 CASE 语句之后立即重复。这会导致语句将其自身结果与其余条件进行比较,从而导致始终选择 3 个条件。
要解决此问题,请从该点删除列名称:
SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 ... END
CASE 语句现在可以正确评估条件,无需不必要的重复,确保达到预期结果。
以上是为什么当 `base_price` 为 0 时,我的 MySQL CASE WHEN 语句选择了错误的条件?的详细内容。更多信息请关注PHP中文网其他相关文章!