【SQL坑】与空值有关的问题
程序员文章站
2022-03-26 15:57:36
...
空值,是指该字段的值为空,但不是null,就相当于该字段的值刚被填好又被删除了,这就回导致与null相关的所有判断都失效。
鬼知道为什么会有这么个东西存在~~~怨念!这里会陆续记录下遇到的与空值相关的问题。
1、不等于符号(<>)会自动过滤空值记录
下面代码只是想用<>剔除等于2的记录,但查询结果为空,而 record_no='20191009121111' 这条记录的flow_status实际为空值,但在<>中则被直接默认剔除了。对于null值而言,该规则同样适用。
select * from purchase_requisition where record_no='20191009121111' and flow_status<>2
2、coalesce会失效
coalesce会依次判断参数是否为null,若不为null则返回该参数值,但flow_status为空值而非null,因此下面的代码会返回一个空值而非是1。
select coalesce(flow_status,1) from purchase_requisition where record_no='20191009121111'
因此这里不能使用coalesce而要用if条件+length()函数进行处理,但要注意这里若要对null值和空值做不同处理,还需要首先判断flow_status是否为null值,然后再判断length()长度。
select if(length(flow_status)=0,1,flow_status) from purchase_requisition where record_no='20191009121111'