1

所以我们试图用有意义的东西替换由“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 的这种任意行为感到困惑

4

0 回答 0