我正在尝试从MySQL Workbench(版本8.0.13)中的表创建报告,并在此过程中通过选择创建多个表:
CREATE TABLE new_table
AS
(SELECT
process,
owner,
...
COUNT(*) AS number_of_s,
AVG(pay) AS avg_pay,
SUM(labor_cost) AS sum_of_labor_costs
FROM
old_table
GROUP BY
process,
owner);
CREATE TABLE AS SELECT
工作正常。
当mysql工作台遇到类型为错误代码:1074。列长度对于列而言太大
UNION
的列时,当我尝试double(0,2)
新建两个表时,抛出。
所以当我跑步
CREATE TABLE new_table_by_month
SELECT
*
FROM
new_table_by_month_1
UNION
SELECT
*
FROM new_table_by_month_2;
并且new_table_by_month_1和new_table_by_month_2具有相同的列,该过程将运行直到遇到sum_of_labor_costs(类型double(0,2)),然后返回错误: 错误代码:1074。列长度对于列sum_of_labor_costs(max = 65535)太大。改用BLOB或TEXT
我知道列类型可能是导致此错误的原因,但是为什么?这里是什么问题?
我如何优化UNION使其正常工作?
更新如果我不创建,请选择:
SELECT
*
FROM
new_table_by_month_1
UNION
SELECT
*
FROM new_table_by_month_2;
有效。当我想从select * from a union select * from b;创建一个new_table时发生
答案 0 :(得分:1)
尝试使用子查询来构建主选择
CREATE TABLE new_table_by_month
SELECT *
from (
select *
FROM new_table_by_month_1
UNION
SELECT *
FROM new_table_by_month_2
) t
;
这样,用于创建的数据类型应该更加清晰。 无论如何,请确保两个查询选择一致的和核心响应的数据类型。似乎您在选择与sum_of_labor_costs对应的错误列。.检查列数据类型的顺序是否相同 尝试反转
CREATE TABLE new_table_by_month
SELECT *
from (
select *
FROM new_table_by_month_2
UNION
SELECT *
FROM new_table_by_month_1
) t
;