0

我正在尝试使用以下查询更新表:

UPDATE test.t1
SET obrigatorios = (SELECT quantidade FROM test.tcur WHERE tipo = 3)
WHERE perfil IN (7, 11);

或者这个查询,应该做同样的事情:

UPDATE test.t1 a, test.tcur b
SET a.obrigatorios = b.quantidade
WHERE a.perfil IN (7, 11)
AND b.tipo = 3;

表 tcur 具有以下结构:

CREATE TABLE `tcur` (\
`quantidade` int(11) default NULL,\
`tipo` int(11) default NULL,\
`descritivo` varchar(12) default NULL\
) ENGINE=MyISAM DEFAULT CHARSET=latin1

表 t1 是这样的:

CREATE TABLE `t1` (\
`qtd` bigint(20) NOT NULL default '0',\
`qtd_vt_disp` int(11) NOT NULL default '0',\
`perfil` binary(11) default NULL,\
`obrigatorios` int(11) NOT NULL default '0'\
) ENGINE=MyISAM DEFAULT CHARSET=latin1

我收到数以万计的关于截断双精度的错误/警告 1292。哪里有问题?“截断不正确的 DOUBLE 值”

4

2 回答 2

0

当引擎必须转换数据类型并且由于它们的大小不同而发生一些精度损失时,会发生此错误。

在这种特殊情况下,字段的数据类型perfil是二进制的,应该是 int。

如果您遇到相同类型的警告“截断不正确的 DOUBLE 值”,请查找不匹配的数据类型。

于 2013-02-14T15:25:21.950 回答
0

对于它的价值,当我遇到类似问题时,我发现数据类型不是问题,它实际上是 MySQL UPDATE 语句的构造。尝试通过 MySQL 工作台手动进行更改,如果您可以手动更新,然后检查工作台如何构造必要的语句。

于 2013-07-03T12:43:23.843 回答