我有一行代码,如果没有成员id,则应该返回null输出,如果不是null,则返回成员类型。
我使用外部联接来加入表格,因此如果该收据的卡号为空,则收据不会与任何成员资格相关联。我使用外部联接成员资格表和生命周期成员资格表,因此如果终身成员资格id为null,则表示该成员不是终身成员,因此它是普通成员。
if
(
i.member_cardnum=null,
'null',
(if(lifetime_cardnum=null,'Plain Member','Lifetime Member'))
) as 'Member Type'
我无法弄清楚为什么代码总会返回'终身会员'无论行的内容如何。
如何修改代码才能使用?
答案 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;
希望它能清除你的怀疑。