所以我们试图用有意义的东西替换由“WITH ROLLUP”创建的NULL值(在这个例子中被有意义的值1替换)并观察到一个奇怪的行为(可能也用你的*Sql-DB尝试)。
查询:
SELECT
IF(a <=> NULL, 1, a) as v1,
IF( a IS NULL, 1, a ) as v2,
IF( a IS NOT NULL, a, 1 ) as v3,
IF( ISNULL(a), 1, a ) as v4,
IF( !ISNULL(a), a, 1 ) as v5,
IF( !!ISNULL(a), 1, a ) as v6,
IFNULL( a, 1 ) as v7
FROM
(SELECT 1 as a) as tmp
GROUP BY
a WITH ROLLUP
结果:
+------+------+------+------+------+------+------+
| v1 | v2 | v3 | v4 | v5 | v6 | v7 |
+------+------+------+------+------+------+------+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | NULL | 1 | NULL | 1 | NULL | 1 |
+------+------+------+------+------+------+------+
那么这里的一般规则是什么???
说明:
我们在这里所做的是使用不同的方法将最后一行中的 NULL 值替换为有意义的值,但是有些方法失败,有些方法有效,这些方法在不同的 MySQL 版本中是否稳定?其他 sql 方言呢?我对我们的 mysql db v5.5.28 的这种任意行为感到困惑