表結構如下:
-------------------------------------------
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 不能成功判斷???
uj5u.com熱心網友回復:
使用 isnull 函式判斷跟 is null 的結果是相同的,if (`fieldname` is null , 'a', 'b') 與 if (`fieldname` is not null, 'b', 'a') 在邏輯上應該是一樣的,單實際結果并不一樣!uj5u.com熱心網友回復:
有人看到嗎?難道說is null不可靠嗎?uj5u.com熱心網友回復:
之前有個類似的問題,估計是 BUGalter table test modify `sex` tinyint(1) NULL;
執行完這個你再查就正確了,貌似 IS NULL 偷懶了,如果列定義為 NOT NULL,就固定判斷不會有 NULL 值,沒有考慮 ROLLUP 這種情況
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/112390.html
標籤:MySQL
