MySQL为什么这个IF()语句总是返回相同的值?

时间:2014-03-11 17:19:31

标签: mysql sql

我有一行代码,如果没有成员id,则应该返回null输出,如果不是null,则返回成员类型。

我使用外部联接来加入表格,因此如果该收据的卡号为空,则收据不会与任何成员资格相关联。我使用外部联接成员资格表和生命周期成员资格表,因此如果终身成员资格id为null,则表示该成员不是终身成员,因此它是普通成员。

if
(
i.member_cardnum=null,
'null',
(if(lifetime_cardnum=null,'Plain Member','Lifetime Member'))
) as 'Member Type'
  • 如果member_cardnum为空
  • return null
  • 否则
  • 如果lifetime_cardnum为null,则返回'普通会员',否则'终身会员'

我无法弄清楚为什么代码总会返回'终身会员'无论行的内容如何。

如何修改代码才能使用?

2 个答案:

答案 0 :(得分:1)

表达式= null总是返回false。与null的任何比较,除了is null和空安全运算符都返回null,其被解释为"不是真的"在布尔逻辑中。

使用if()

,您可以在没有嵌套case语句的情况下执行此操作
(case when i.member_cardnum is null then 'null' 
      when lifetime_cardnum is null then 'Plain Member'
      else 'Lifetime Member'
 end) as "Member Type"

我还更改了as语句以使用双引号。仅对字符串常量使用单引号。将它们用于标识符会引起混淆和问题。

答案 1 :(得分:0)

据我所知,null总是评估为假。

    //This line return false
    select if(null,'true','false')as returntype;
    OR    
    select if(0,'true','false')as returntype;

     //This line return true
     select if(1,'true','false')as returntype;

希望它能清除你的怀疑。