0

我正在通过 向视图添加信息UNION。我目前在由 表示的表中有布尔值TINYINT。我需要将这些列维护为TINYINT. 中的以下信息UNION将数据类型更改为BIGINT

<PREVIOUS SELECT (Type of isRequired = TINYINT)>
    SELECT isRequired
    FROM tableA
    UNION
<NEW SELECT (After this, isRequired = BIGINT)>
    SELECT
    1 AS isRequired
    FROM tableB

显然,MYSQLCAST()不会转换为TINYINT. 如何保留TINYINT原始视图?

4

1 回答 1

2

我不知道您为什么“需要将这些列维护为TINYINT”。但是 - 一种解决方法是定义一个返回TINYINT值的自定义函数。

create function cast2tinyint(v bigint)
  returns tinyint
  deterministic no sql
  return v;

那么您的查询将是

SELECT isRequired
FROM tableA
UNION
SELECT
cast2tinyint(1) AS isRequired
FROM tableA

您可以测试它将结果存储到(临时)表中。

原始查询:

create temporary table tmp1
    SELECT isRequired
    FROM tableA
    UNION
    SELECT
    1 AS isRequired
    FROM tableA
;

show create table tmp1;

结果:

CREATE TEMPORARY TABLE `tmp1` (
  `isRequired` bigint(20) DEFAULT NULL
)

使用自定义函数:

create temporary table tmp2
    SELECT isRequired
    FROM tableA
    UNION
    SELECT
    cast2tinyint(1) AS isRequired
    FROM tableA
;

show create table tmp2;

结果:

CREATE TEMPORARY TABLE `tmp2` (
  `isRequired` tinyint(4) DEFAULT NULL
)

在 DB Fiddle 上查看

于 2019-09-06T17:20:29.333 回答