MySQL案例只是评估第一个条件。

MySQL案例只是评估第一个条件。,mysql,case,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.CostPerCy

我有两个表,一个表包含支付周期,另一个表包含每年、每月等需要支付的东西

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

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;
选择
L.UserID,
美国用户名,
L.CostPerCycle,
CT.CycleType,
环基乙素
当L.CycleTypeID=1时,则L.CostPerCycle*12
当L.CycleTypeID=2时,则L.CostPerCycle*3
当L.CycleTypeID=3时,则L.CostPerCycle*2
当L.CycleTypeID=4时,则L.CostPerCycle
当L.CycleTypeID=5时,则L.CostPerCycle
以年度成本结束
从…起
链接L
在L.UserID=U.UserID上左加入用户U
在L.CycleTypeID=CT.CycleTypeID上左连接CycleTypes CT
哪里
环乙肽6;
问题是MySQL返回的是空值,而不是乘法的结果,我不知道为什么

我注意到只有第一个条件正在被评估,但我不确定其他条件发生了什么

换言之:

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

希望这些信息能为我指明正确的方向


谢谢

这是您想要的
案例
语句:

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。唯一可能匹配的是id
0
1
。其他一切都会失败。如果没有
else
子句,这些将获得
NULL
值。

这就是您想要的
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。唯一可能匹配的是id
0
1
。其他一切都会失败。如果没有
else
子句,这些将获得
NULL
值。

此外,没有其他值,因此任何大于5的值也将导致NULL值。感谢您的提示和回答。我查看了MySQL文档,没有意识到我混合了同一语句的两种形式。想知道为什么MySQL有两种方法来编写相同的语句。@AlanChavez。这不是MySQL,而是ANSI标准有这两个。此外,没有其他标准,因此任何大于5的值也会导致空值。感谢大家的提示和Gordon的回答。我查看了MySQL文档,没有意识到我混合了同一语句的两种形式。想知道为什么MySQL有两种方法来编写相同的语句。@AlanChavez。这不是MySQL,而是ANSI标准有两个。