我有这张桌子:
CREATE TABLE `peso_tec_dt_aj` (
`idade` int(11) DEFAULT NULL,
`tecnico` varchar(50) DEFAULT NULL,
`obt` double DEFAULT NULL,
`pad` decimal(4,3) DEFAULT NULL,
`aves_peso` int(11) DEFAULT NULL,
`data_domingo` datetime DEFAULT NULL,
`data_domingo_ajustada` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
KEY `peso_tec_dt_aj_idade_tecnico_index` (`idade`,`tecnico`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
下面的查询有效如果我使用带语句ENGINE = MYSAM的create,但不使用如果我使用引擎InnoDB。
如果我不进行聚合,或者我在组中删除了列字段data_domingo
(DATETIME),它也会起作用:
CREATE TABLE bucket_15.resultado as (
select
peso_tec_dt_aj.idade,
peso_tec_dt_aj.tecnico,
(
ROUND(
SUM(peso_tec_dt_aj.obt * peso_tec_dt_aj.aves_peso) /
SUM(peso_tec_dt_aj.aves_peso), 3
)
) as campo_computeado
from bucket_15.peso_tec_dt_aj
group by
peso_tec_dt_aj.idade,
peso_tec_dt_aj.tecnico,
peso_tec_dt_aj.data_domingo
);
运行此查询后,MySQL不会显示错误。没有create table
的查询运行正常。
但是,上面的查询非常简单。为什么MySQL无法创建包含此列和数据的表?
MySQL版本:5.7
以下是一些屏幕截图,告诉您使用相同的查询,如果引擎不是MYISAM,则无效。
FIRST IMAGE :使用两个引擎运行我将在语句CREATE WITH SELECT上使用的查询:MYISAM和InnoDB。
第二张图片:运行不带ENGINE = MYISAM的查询。上面的结果预计会出现在新表resultado
上,但它不是:没有错误。
第三张图片:WITH ENGINE = MYISAM - 表resultado
神奇地创建
答案 0 :(得分:1)
此版本表可以通过我的5.6.35版本正常运行,没有任何错误
CREATE TABLE `peso_tec_dt_aj` (
`idade` int(11) DEFAULT NULL,
`tecnico` varchar(50) DEFAULT NULL,
`obt` double DEFAULT NULL,
`pad` decimal(4,3) DEFAULT NULL,
`aves_peso` int(11) DEFAULT NULL,
`data_domingo` datetime DEFAULT NULL,
`data_domingo_ajustada` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
KEY `peso_tec_dt_aj_idade_tecnico_index` (`idade`,`tecnico`)
) ENGINE=MYISAM DEFAULT CHARSET=latin1;
CREATE TABLE resultado as (
select
peso_tec_dt_aj.idade,
peso_tec_dt_aj.tecnico,
(
ROUND(
SUM(peso_tec_dt_aj.obt * peso_tec_dt_aj.aves_peso) /
SUM(peso_tec_dt_aj.aves_peso), 3
)
) as campo_computeado
from bucket_15.peso_tec_dt_aj
group by
peso_tec_dt_aj.idade,
peso_tec_dt_aj.tecnico,
peso_tec_dt_aj.data_domingo
) ENGINE=MYISAM DEFAULT CHARSET=latin1;
关于第二个查询,如果它不起作用MySQL应该在终端或日志文件中记录错误。
在第二个创建查询中,您在名称中有一个点。这就是为什么它不起作用的原因。