我最近遇到一个mysql的问题!
列如:update goods set rate=(case id when 1 then 0.9  when 2 then 0.8 when 3 then 0.5 else rate),money=price*rate where id in(1,2,3); 这样的一个sql语句,rate在执行前都是1,以前计算的结果都是正确的,最近不知道是怎么回事,计算的结果却去不正确,rate的值是没有执行的值去计算的,结果导致money的计算结果是1*price,结果折扣和金额对应不上.急需求解这是为什么会这样。

解决方案 »

  1.   

    你select 出来 看看
    select 
    (case id when 1 then 0.9  when 2 then 0.8 when 3 then 0.5 else rate),money=price*rate where id in(1,2,3); 
      

  2.   

    分开执行吧,这样效率还能提高一点。
    UPDATE goods SET rate=0.9,money=price*rate WHERE id = 1 ;
    UPDATE goods SET rate=0.8,money=price*rate WHERE id = 2 ;
    UPDATE goods SET rate=0.5,money=price*rate WHERE id = 3 ;
      

  3.   

     SQL 语句没有错
     你看下你rate的类型,是不是不能存小数?
      

  4.   

    脚本中发现以下两个错误:
    1. as A处, A字母使用的是全解输入
    2. AS B处, 在AS B处前面的小括号里面,已经有一个AS W了
    语句嵌套的有点多,建议使用以下形式:
    select A.* 
    FROM score AS A
    LEFT JOIN course AS AC ON A.course_id = AC.cid
    LEFT JOIN score AS B ON A.student_id = B.student_id
    LEFT JOIN course AS BC ON B.course_id = BC.cid
    WHERE AC.cname = N'物理' AND BC.cname = N'生物'