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

时间:2013-09-06 21:30:15

标签: 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会做一些事情,我不确定它是做什么的基本上'忽略'其余的条件。

希望有足够的信息指出我正确的方向!

谢谢!

1 个答案:

答案 0 :(得分:3)

这是您想要的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 01。其他一切都将落空。如果没有else子句,则会获得NULL个值。