我有个表假设名称为table1
有五个字段,分别假设为 id,c1,c2,c3,c4
除了id字段为int类型外,其它4个都是decimal(13,4)的,
我现在有一个更新语句,老是出问题,语句是这样的 update table1 set c4=sqrt(c1*c1+c2*c2+c3*c3);
这条语句肯定是没有语法错误的,我用jdbc连接执行的时候也不报错,可是计算的结果却是表里面的一部分数据计算了,而一部分却没有计算,搞了好久了,就是搞不懂这是为什么,(我的表里面的数据比较多,一般都有一二十万笔数据以上)。谢谢了。请大家帮帮我吧。

解决方案 »

  1.   

    可是计算的结果却是表里面的一部分数据计算了,而一部分却没有计算
    将计算与否的记录贴出来看看,是否有NULL值
      

  2.   

    没有NULL值的,
    我如果重复的执行下面这条语句,一般执行个四到五次差不多能够保证全部执行。
    update table1 set c4=sqrt(c1*c1+c2*c2+c3*c3) where c4 is null;
    我想了很久就是搞不懂是为什么?
      

  3.   

    导数据啊,存成TXT格式,只要有问题的记录,大约10条左右就可以了
      

  4.   

    问题不是出在记录本身,比如我看某一笔数据没有计算,我如果专门的针对这条记录进行计算却又可以,例如我看到id为123的记录没有计算,我直接
    update table1 set c4=sqrt(c1*c1+c2*c2+c3*c3) where id=123;
    这样执行一点问题都没有,很正常啊。
      

  5.   

    既然SQL语句没有问题,记录也没有问题,问题在哪里?
    触发器、约束、关系?
      

  6.   

    没有触发器、约束也只有id是主键约束,关系根本没有,而且这些也应该不会影响到这个更新吧,而且我感觉这一条sql语句更新应该是成功就都成功,失败就都失败吧,总不能部分成功,部分失败啊。
      

  7.   

    没有用事务吧?在MYSQL中直接运行还是在程序中?
      

  8.   

    在程序中也试了,没有用事务,在命令提示符下用mysql命令也试了,都一样效果。
      

  9.   

    导出数据吧,10条左右就可以了,用MYSQL DUMP OR 用MYSQL管理工具导。
      

  10.   

    --这样测试一下吧!--获取表的所以记录行数select count(*) from table1;--影响的记录行数update table1 set c4=sqrt(c1*c1+c2*c2+c3*c3); 看看实际影响的记录行数是否匹配总记录行数.
      

  11.   

    还有一种可能是超出了decimal数据范围
      

  12.   

    还有一种可能是超出了decimal数据范围