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。唯一可能匹配的是id0
和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。唯一可能匹配的是id0
和1
。其他一切都会失败。如果没有else
子句,这些将获得NULL
值。此外,没有其他值,因此任何大于5的值也将导致NULL值。感谢您的提示和回答。我查看了MySQL文档,没有意识到我混合了同一语句的两种形式。想知道为什么MySQL有两种方法来编写相同的语句。@AlanChavez。这不是MySQL,而是ANSI标准有这两个。此外,没有其他标准,因此任何大于5的值也会导致空值。感谢大家的提示和Gordon的回答。我查看了MySQL文档,没有意识到我混合了同一语句的两种形式。想知道为什么MySQL有两种方法来编写相同的语句。@AlanChavez。这不是MySQL,而是ANSI标准有两个。