首页 >数据库 >mysql教程 >如何在 MySQL 中正确使用 CASE WHEN 与数字列和搜索条件?

如何在 MySQL 中正确使用 CASE WHEN 与数字列和搜索条件?

Susan Sarandon
Susan Sarandon原创
2025-01-02 14:41:401037浏览

How to Correctly Use CASE WHEN in MySQL with Numeric Columns and Search Conditions?

在 MySQL 中正确使用 CASE..WHEN

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

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