mysql 5.7 对于NULL值的判断 is null 与 is not null 有什么区别?请大神赐教

小草随风 2017-09-07 03:32:26
表结构如下:
-------------------------------------------
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`sex` tinyint(1) NOT NULL,
`name` char(10) NOT NULL,
`age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-----------------------------------------------------------------------
添加如下数据:
-------------------------------------------------------------------------
INSERT INTO `test` (`id`, `sex`, `name`, `age`) VALUES
(1, 1, 'a1', 12),
(2, 0, 'b1', 13),
(3, 1, 'a1', 12),
(4, 0, 'b1', 13),
(5, 1, 'a2', 15),
(6, 0, 'b2', 16),
(7, 0, 'b3', 18),
(8, 1, 'a3', 19),
(9, 0, 'b4', 21);
------------------------------------------------------------
分别执行如下sql分组语句
--------------------------------------------------
1、
SELECT sex,
if(sex is null,'',group_concat(name)) as name1
FROM `test` group by sex with ROLLUP
--------------------------------------------------
sex name1
0 b1,b1,b2,b3,b4
1 a1,a1,a2,a3
NULL b1,b1,b2,b3,b4,a1,a1,a2,a3
--------------------------------------------
2、
SELECT sex,
if(sex is not null,group_concat(name),'') as name1
FROM `test` group by sex with ROLLUP
--------------------------------------------------
sex name1
0 b1,b1,b2,b3,b4
1 a1,a1,a2,a3
NULL
--------------------------------------------------
问题:为什么 is not null 判断出了sex不为NULL 的情况 ,而 is null 不能成功判断???
...全文
494 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2017-09-08
  • 打赏
  • 举报
回复
之前有个类似的问题,估计是 BUG alter table test modify `sex` tinyint(1) NULL; 执行完这个你再查就正确了,貌似 IS NULL 偷懒了,如果列定义为 NOT NULL,就固定判断不会有 NULL 值,没有考虑 ROLLUP 这种情况
小草随风 2017-09-07
  • 打赏
  • 举报
回复
有人看到吗?难道说is null不可靠吗?
小草随风 2017-09-07
  • 打赏
  • 举报
回复
使用 isnull 函数判断跟 is null 的结果是相同的,if (`fieldname` is null , 'a', 'b') 与 if (`fieldname` is not null, 'b', 'a') 在逻辑上应该是一样的,单实际结果并不一样!

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧