0
点赞
收藏
分享

微信扫一扫

mysql not in 不包含null


权限处理,正常用户,不包含测试数据。

写了个comp_id not in(1,2,3)。

结果部分发票 comp_id 是null,就查看不到了。

正常需求,应该看到。

解决办法一:

comp_id not in(1,2,3) or comp_id is null。

但是,这种办法,对项目影响较大,改动的地方比较多。

 

解决办法二:

修改comp_id 默认值为“”,因为项目中 公司id 用的是 varchar,所以可以这么做。

 

解决办法三:

如果comp_id是int(11)整型,修改默认值为0。

在界面中展示或程序内部判断的时候,注意  comp_id > 0,这样程序就不会有bug了。

 

这个问题,还让我想起一个问题,创建数据库表结构的时候,不推荐默认值为null,NULL不方便走索引。

效率可能非常低。(大概如此,不是数据库专家,嘿嘿)

 

--------------------另外一个哥们遇到的-------------


假如有表t1: 

id  |   val
-------------
1    |     a
2    |     (NULL)
3    |      b
4    |    (NULL)

我想找出val不是a的行,执行sql语句:

SELECT * FROM t1 WHERE val NOT IN ('a')


结果会是什么? 

id  |   val
-------------
1    |     b

只有一行,那2行val为NULL的是不包含在内的,

所以要完整查出,sql应该是这样的:

SELECT * FROM t1 WHERE val NOT IN ('a') OR val IS NULL


--------------------- 
作者:wuzuyu365 

举报

相关推荐

0 条评论