首页 >数据库 >mysql教程 >如何避免歧义并正确使用 MySQL 中的 CASE..WHEN 语句?

如何避免歧义并正确使用 MySQL 中的 CASE..WHEN 语句?

Patricia Arquette
Patricia Arquette原创
2024-12-26 06:17:13847浏览

How to Avoid Ambiguity and Correctly Use CASE..WHEN Statements in MySQL?

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: 用于涉及相等性检查的简单条件表达式。
  • 搜索 CASE: 使用所提供示例中的搜索条件。在这种形式中,WHEN 子句中的前缀应被省略。

通过使用正确的形式并删除多余的前缀,CASE 表达式可以准确地评估条件。

以上是如何避免歧义并正确使用 MySQL 中的 CASE..WHEN 语句?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn