sql等于和is null的取反

一、MySQL和PostgreSQL

MySQL和PostgreSQL中,=is null不同,=的对立面是!=is null的对立面是is not null,因此!= true的查询结果只有= false的部分,而不包括is null的部分。

1、boolean类型(bool)

-- bool类型不等于true的为啥取的结果是等于false的记录,而没有值为null的记录
select * from ods.ods_table where is_deleted != 't';

-- 正确写法
select * from ods.ods_table where is_deleted = 'f' or is_deleted is null;
-- 字段有 null 值的要特别小心,用 = 和 is null 或 not is null 得到的结果不同。

2、varchar类型

有null也是一样的判断,在使用=is null要分开考虑。过滤条件与字段所属数据类型无关,与=is null的对立面不同有关,不管是何种数据类型,都要小心有null的字段。平时要注意:查询时不能用等于null,更新时可以用等于null。

二、MongoDB

测试工具:Studio 3T for MongoDB
测试集:创建一个collection:is_deleted_test
测试数据:通过Ctrl+D 添加document到mongo测试集,测试数据如下:

{ 
    "_id" : ObjectId("6441da6b16f86a1a302516ac"), 
    "company_num_id" : 123.0, 
    "is_deleted" : false
}
{ 
    "_id" : ObjectId("6441da7916f86a1a302516ad"), 
    "company_num_id" : 456.0, 
    "is_deleted" : true
}
{ 
    "_id" : ObjectId("6441da9616f86a1a302516ae"), 
    "company_num_id" : 789.0, 
    "is_deleted" : null
}
{ 
    "_id" : ObjectId("6441da9d16f86a1a302516af"), 
    "company_num_id" : 1024.0
}

先测试不等于true的查询结果,Query如下:

{is_deleted:{$ne:true}}

查询结果如下:

{ 
    "_id" : ObjectId("6441da6b16f86a1a302516ac"), 
    "company_num_id" : 123.0, 
    "is_deleted" : false
}
{ 
    "_id" : ObjectId("6441da9616f86a1a302516ae"), 
    "company_num_id" : 789.0, 
    "is_deleted" : null
}
{ 
    "_id" : ObjectId("6441da9d16f86a1a302516af"), 
    "company_num_id" : 1024.0
}

可见mongodb的查询和mysql、postgresql还是有差别的。

{is_deleted:{$exists:false}}
{ 
    "_id" : ObjectId("6441da9d16f86a1a302516af"), 
    "company_num_id" : 1024.0
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值