mysql CASE WHEN,但不是两者

时间:2017-04-15 10:08:30

标签: mysql case

我有一个案例陈述:

case when R1 = risk_factor OR R2 = risk_factor then 1 else 0 end

但它也会选择

case when R1 = risk_factor AND R2 = risk_factor then 1 else 0 end

状态的正确语法是什么:

case when (R1 = risk_factor or R2 = risk_factor) BUT NOT (R1 = risk_factor AND R2 = risk_factor) then 1 else 0 end   

2 个答案:

答案 0 :(得分:4)

(R1 = risk_factor or R2 = risk_factor) BUT NOT (R1 = risk_factor AND R2 = risk_factor)

应该是

(R1 = risk_factor or R2 = risk_factor) AND NOT (R1 = risk_factor AND R2 = risk_factor)

但您也可以使用XOR

(R1 = risk_factor XOR R2 = risk_factor)
  

逻辑异或。如果任一操作数为NULL,则返回NULL。对于非NULL   操作数,如果奇数个操作数非零,则求值为1,   否则返回0。

Documentation

但是 - 在特定情况下,您也可以将条件写为

(risk_factor IN (R1, R2) AND R1 <> R2)

注意:如果您的CASE表达式与then 1 else 0类似,那么根本不需要它。你可以使用布尔表达式。有一个例外:如果您的布尔表达式可以返回NULL并且您想将其转换为0。但在这种情况下,您也可以使用COALESCE(boolean_expression, 0)

答案 1 :(得分:2)

你必须从“最难”的条件开始

case when (R1 = risk_factor AND R2 = risk_factor) then 0
     when (R1 = risk_factor  OR R2 = risk_factor) then 1 
     else 0 
end