MySQL 中 CASE..WHEN 的复杂性
MySQL 中的 CASE..WHEN 语句为条件表达式求值提供了一种通用的方法。但是,在处理某些场景时会出现复杂性。
不明确的 CASE 语法
当 base_price 列在 CASE 表达式中添加前缀时,就会遇到这样的复杂性。如示例查询中所示,在 WHEN 子句中使用 course_enrollment_settings.base_price 会产生歧义。
查询:
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
问题:
在此查询中,CASE 语句不正确制定的。通过在 WHEN 之后包含 course_enrollment_settings.base_price,会导致对条件的评估不正确。
解决方案:
要解决此问题,请消除 CASE 表达式中的表前缀:
SELECT CASE WHEN base_price = 0 THEN 1 ... END
两种形式CASE
CASE 语句有两种不同的形式:
通过使用正确的形式并删除多余的前缀,CASE 表达式可以准确地评估条件。
以上是如何避免歧义并正确使用 MySQL 中的 CASE..WHEN 语句?的详细内容。更多信息请关注PHP中文网其他相关文章!