使用 UNION 更新视图将 TINYINT 更改为 BIGINT
Update View with UNION changes TINYINT to BIGINT
我正在通过 UNION
向视图添加信息。我目前在由 TINYINT
表示的 table 中有布尔值。我需要将这些列维护为 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
显然,MYSQL CAST()
不会转换为 TINYINT
。如何在原始视图中保留 TINYINT
?
我不知道你为什么 "need to maintain these columns as TINYINT
"。但是 - 一种解决方法是定义一个自定义函数,其中 returns 一个 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
您可以测试将结果存储到(临时)table。
原查询:
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
)
我正在通过 UNION
向视图添加信息。我目前在由 TINYINT
表示的 table 中有布尔值。我需要将这些列维护为 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
显然,MYSQL CAST()
不会转换为 TINYINT
。如何在原始视图中保留 TINYINT
?
我不知道你为什么 "need to maintain these columns as TINYINT
"。但是 - 一种解决方法是定义一个自定义函数,其中 returns 一个 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
您可以测试将结果存储到(临时)table。
原查询:
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
)