4

我正在尝试使用更新查询更新 2 个不同的表,如下所示

UPDATE  db1.table1 a, db2.table1 b 
SET       b.firstname  =  a.firstname,
          b.lastname   =  a.lastname,
          b.address    =  a.address,
          b.state      =  a.state,
          b.city       =  a.city,
          b.zip        =  a.zip             

WHERE a.stud_id=b.stud_id AND a.firstname IS NOT NULL AND b.firstname IS NULL
          AND str_to_date(a.joindate,'%m/%d/%Y') >= str_to_date('02/01/2012','%m/%d/%Y');

但是当我尝试执行此查询时,MySQL 不断抛出以下错误

Error Code: 1292. Truncated incorrect DOUBLE value: 'CROUGH0000'

虽然我在 stackoverflow 中找到了很多类似的帖子,但我找不到这个问题的确切解决方案。

需要一些帮助。提前致谢


编辑:每列的数据类型如下

              b.firstname(varchar(25))  =  a.firstname(varchar(52)),
              b.lastname(varchar(25))   =  a.lastname(varchar(35)),
              b.address(varchar(40))    =  a.address(varchar(50)),
              b.state(char(2))      =  a.state(char(2)),
              b.city(varchar(25))       =  a.city(varchar(25)),
              b.zip(varchar(11))        =  a.zip(varchar(11))
4

4 回答 4

2

如果所有这些列都是 varchar(如上所述),那么问题一定出在a.stud_id=b.stud_id.

检查表 a 和 b 中的数据类型。有些东西必须是双重的,否则 MySQL 不会抱怨它。

于 2013-04-05T19:04:05.833 回答
2

对我来说,显示此错误是因为我使用“和”来更新 2 个查询而不是“逗号”。

此代码段显示错误:

UPDATE employees 
SET 
lastname = 'Hill'and
email = 'mary.hill@classicmodelcars.com'
WHERE
employeeNumber = 1056;

此片段显示了更正:

UPDATE employees 
SET 
lastname = 'Hill',
email = 'mary.hill@classicmodelcars.com'
WHERE
employeeNumber = 1056;
于 2018-03-02T02:05:54.203 回答
0

我认为该joindate列包含一个不是字符串日期的字符串值。

为了检查,如果可能的话,我建议测试以下 SQL 命令

UPDATE db1.table1 a
      ,db2.table1 b 
SET b.firstname = b.firstname,
WHERE a.stud_id=b.stud_id 
  AND a.firstname IS NOT NULL 
  AND b.firstname IS NULL;

如果这项工作有效,则没有任何改变,但您知道您的问题与joindate字段或str_to_date功能有关。

注意: b.firstname 被分配给相同的值 -> 没有任何改变

于 2019-05-07T12:20:43.083 回答
0

我遇到了一个意外问题,我在 where 子句中正确比较了数据类型,但仍然遇到了同样的异常。

我有这个例外只是因为我在表上有一个计划的事件,我试图更新它清楚地比较了 where 子句中的不同类型的字段。解决该问题后,一切正常。

于 2021-09-13T16:35:02.400 回答