MySQL 案例仅评估第一个条件。

标签 mysql case

我有两张表,一张是付款周期,另一张是按年、按月等需要支付的东西。

我正在以这种方式查询数据库:

SELECT
    L.UserID,
    U.Username,
    L.CostPerCycle,
    CT.CycleType,
    CASE L.CycleTypeID
        WHEN L.CycleTypeID = 1 THEN L.CostPerCycle * 12
        WHEN L.CycleTypeID = 2 THEN L.CostPerCycle * 3
        WHEN L.CycleTypeID = 3 THEN L.CostPerCycle * 2
        WHEN L.CycleTypeID = 4 THEN L.CostPerCycle
        WHEN L.CycleTypeID = 5 THEN L.CostPerCycle
    END AS AnnualCost
FROM
    Links L
    LEFT JOIN Users U ON L.UserID = U.UserID
    LEFT JOIN CycleTypes CT ON L.CycleTypeID = CT.CycleTypeID
WHERE
    L.CycleTypeID <> 6;

问题是 MySQL 返回 NULL 值而不是乘法结果,我不确定为什么。

我注意到只评估了第一个条件,但我不确定其他条件是怎么回事。

换句话说:

如果有一条记录带有 CycleTypeID = 1,则 MySQL 将 CostPerCycle 乘以 12。但是,如果 CycleTypeID 与第一个条件不同,则 MySQL 会做一些事情,我我不确定它做了什么基本上“忽略”了我的其余条件。

希望这些信息足以为我指明正确的方向!

谢谢!

最佳答案

这是你想要的case语句:

CASE 
    WHEN L.CycleTypeID = 1 THEN L.CostPerCycle * 12
    WHEN L.CycleTypeID = 2 THEN L.CostPerCycle * 3
    WHEN L.CycleTypeID = 3 THEN L.CostPerCycle * 2
    WHEN L.CycleTypeID = 4 THEN L.CostPerCycle
    WHEN L.CycleTypeID = 5 THEN L.CostPerCycle
END AS AnnualCost;

您正在混合两种不同形式的语句。您也可以将其表述为:

CASE L.CycleTypeID
    WHEN 1 THEN L.CostPerCycle * 12
    WHEN 2 THEN L.CostPerCycle * 3
    WHEN 3 THEN L.CostPerCycle * 2
    WHEN 4 THEN L.CostPerCycle
    WHEN 5 THEN L.CostPerCycle
END AS AnnualCost;

您的版本返回 NULL 值的原因是因为它正在将 L.CycleTypeId 与表达式 L.CycleTypeId = x 的值进行比较.后一个表达式是 0 或 1。唯一可能匹配的是 ids 01。其他一切都会失败。如果没有 else 子句,这些将获得 NULL 值。

关于MySQL 案例仅评估第一个条件。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18666870/

相关文章:

PHP Switch - 只查看一个案例?

java - switch 中的类似情况,差异很小

MySQL 使用别名进行大小写切换

php - 如何使 PHP 脚本实时响应数据库插入?

c# - 从数据库反序列化二进制数组 C#

php - 从数据库格式化文本

bash - vi 将 bash 脚本大写或小写突出显示为错误

mysql - 在 MySql 中查找所选项目数量的最快方法?

mysql - SQL 包含相关表中 id 不存在的结果

vb.net - 将 Case 语句与表中的 Int 条目一起使用