表结构如下:
-------------------------------------------
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 不能成功判断???

解决方案 »

  1.   

    使用 isnull 函数判断跟 is null 的结果是相同的,if (`fieldname` is null , 'a', 'b')  与 if (`fieldname` is not null, 'b', 'a') 在逻辑上应该是一样的,单实际结果并不一样!
      

  2.   

    有人看到吗?难道说is null不可靠吗?
      

  3.   

    之前有个类似的问题,估计是 BUG
    alter table test modify `sex` tinyint(1)  NULL;
    执行完这个你再查就正确了,貌似 IS NULL 偷懒了,如果列定义为 NOT NULL,就固定判断不会有 NULL 值,没有考虑 ROLLUP 这种情况