create table a ( i int );
insert into a values(null),(1);
mysql> select ifnull(i,2) from a group by ( ifnull(i,2) ) with rollup;
+–+
| ifnull(i,2) |
+–+
| 1 |
| 2 |
| NULL |
+–+
3 rows in set (0.00 sec)
mysql> select ifnull(i,2) is null from a group by ( ifnull(i,2) ) with rollup;
+–+
| ifnull(i,2) is null |
+–+
| 0 |
| 0 |
| 0 | /////////////////这里, oracle返回1
+–+
3 rows in set (0.00 sec)
insert into a values(null),(1);
mysql> select ifnull(i,2) from a group by ( ifnull(i,2) ) with rollup;
+–+
| ifnull(i,2) |
+–+
| 1 |
| 2 |
| NULL |
+–+
3 rows in set (0.00 sec)
mysql> select ifnull(i,2) is null from a group by ( ifnull(i,2) ) with rollup;
+–+
| ifnull(i,2) is null |
+–+
| 0 |
| 0 |
| 0 | /////////////////这里, oracle返回1
+–+
3 rows in set (0.00 sec)
解决方案
40
这里面还涉及一个表达 式重用的问题
假如你改成 group by i, 你会发现结果 都是0,这是原因是select 结果之前都不会用到相关的表达式,自然也不存在重用的问题,所以 ifnull(i,2) is null 在结果中生成
假如你改成 group by i, 你会发现结果 都是0,这是原因是select 结果之前都不会用到相关的表达式,自然也不存在重用的问题,所以 ifnull(i,2) is null 在结果中生成