Mysql 从并集运算符中消除空值

Mysql 从并集运算符中消除空值,mysql,sql,mariadb,union,sql-null,Mysql,Sql,Mariadb,Union,Sql Null,我们应该如何消除空值而不是将其保留在单独的行中,值必须驻留在列中,从而通过使用已执行结果集中的联合集运算符使空值消失 考虑一下简单的SQL查询 SELECT * FROM ( (SELECT 6 + 2 AS addition, NULL AS subtraction, NULL AS multiplication, NULL AS division FROM DUAL) UNION (SELEC

我们应该如何消除空值而不是将其保留在单独的行中,值必须驻留在列中,从而通过使用已执行结果集中的联合集运算符使空值消失

考虑一下简单的SQL查询

SELECT
  *
FROM
  (
    (SELECT
      6 + 2 AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      NULL AS division
    FROM
      DUAL)
    UNION
    (SELECT
      NULL AS addition,
      6 - 2 AS subtraction,
      NULL AS multiplication,
      NULL AS division
    FROM
      DUAL)
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      6 * 2 AS multiplication,
      NULL AS division
    FROM
      DUAL)
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      6 / 2 AS division
    FROM
      DUAL)
  ) A;
实际结果:

+----------+-------------+----------------+----------+
| addition | subtraction | multiplication | division |
+----------+-------------+----------------+----------+
|        8 |        NULL |          NULL  |     NULL |
|     NULL |           4 |          NULL  |     NULL |
|     NULL |        NULL |            12  |     NULL |
|     NULL |        NULL |          NULL  |   3.0000 |
+----------+-------------+----------------+----------+
4 rows in set (0.00 sec)
+----------+-------------+----------------+----------+
| addition | subtraction | multiplication | division |
+----------+-------------+----------------+----------+
|        8 |           4 |          12    |   3.0000 |
+----------+-------------+----------------+----------+
1 row in set (0.00 sec)
预期结果:

+----------+-------------+----------------+----------+
| addition | subtraction | multiplication | division |
+----------+-------------+----------------+----------+
|        8 |        NULL |          NULL  |     NULL |
|     NULL |           4 |          NULL  |     NULL |
|     NULL |        NULL |            12  |     NULL |
|     NULL |        NULL |          NULL  |   3.0000 |
+----------+-------------+----------------+----------+
4 rows in set (0.00 sec)
+----------+-------------+----------------+----------+
| addition | subtraction | multiplication | division |
+----------+-------------+----------------+----------+
|        8 |           4 |          12    |   3.0000 |
+----------+-------------+----------------+----------+
1 row in set (0.00 sec)

你可以在下面试试-

SELECT
  max(addition) as addition,max(subtraction) as subtraction, max(multiplication) as multiplication,max(division) as division
FROM
  (
    (SELECT
      6 + 2 AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      NULL AS division
    FROM
      DUAL)
    UNION
    (SELECT
      NULL AS addition,
      6 - 2 AS subtraction,
      NULL AS multiplication,
      NULL AS division
    FROM
      DUAL)
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      6 * 2 AS multiplication,
      NULL AS division
    FROM
      DUAL)
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      6 / 2 AS division
    FROM
      DUAL)
  ) A;
你可以在下面试试-

SELECT
  max(addition) as addition,max(subtraction) as subtraction, max(multiplication) as multiplication,max(division) as division
FROM
  (
    (SELECT
      6 + 2 AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      NULL AS division
    FROM
      DUAL)
    UNION
    (SELECT
      NULL AS addition,
      6 - 2 AS subtraction,
      NULL AS multiplication,
      NULL AS division
    FROM
      DUAL)
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      6 * 2 AS multiplication,
      NULL AS division
    FROM
      DUAL)
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      6 / 2 AS division
    FROM
      DUAL)
  ) A;
这应该可以

SELECT
 sum(isnull(addition,0)) addition
 ,sum(isnull(subtraction,0)) subtraction
 ,sum(isnull(multiplication,0)) multiplication
 ,sum(isnull(division,0)) division
FROM
  (
    (SELECT
      6 + 2 AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      NULL AS division
    )
    UNION
    (SELECT
      NULL AS addition,
      6 - 2 AS subtraction,
      NULL AS multiplication,
      NULL AS division
    )
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      6 * 2 AS multiplication,
      NULL AS division
    )
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      6 / 2 AS division
    )
  ) A
这应该可以

SELECT
 sum(isnull(addition,0)) addition
 ,sum(isnull(subtraction,0)) subtraction
 ,sum(isnull(multiplication,0)) multiplication
 ,sum(isnull(division,0)) division
FROM
  (
    (SELECT
      6 + 2 AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      NULL AS division
    )
    UNION
    (SELECT
      NULL AS addition,
      6 - 2 AS subtraction,
      NULL AS multiplication,
      NULL AS division
    )
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      6 * 2 AS multiplication,
      NULL AS division
    )
    UNION
    (SELECT
      NULL AS addition,
      NULL AS subtraction,
      NULL AS multiplication,
      6 / 2 AS division
    )
  ) A

Will,您将尝试运行上述查询。由于在调用本机函数“isnull”时导致参数计数不正确,因此您的查询结果与Will类似,因此您尝试运行上述查询。由于在调用本机函数“isnull”时导致参数计数不正确,所以您的查询结果如下