日期:2014-05-16  浏览次数:20868 次

mysql Update时候如何工作的?
初始状态 
  订单表:price=0,cost(总额)=0,quality=100,goods=实际商品名称
  价格表:marketprice=12.5,goods = 实际商品名称
目的: 根据订单的商品名 取得 价格表里对应的 价格 赋值到 订单表的 price 
  然后根据订单表的 price和quality计算出总额cost
   
  (这是举个例子,不合理的思路不管,只看SQL语句)

SQL: update 订单表 a,价格表 b set a.price=b.marketprice,a.cost=a.price*a.quality where a.goods = b.goods

上面这条语句
  订单表里有两条记录时候,得出结果都是正确的,订单表的price和cost都是正确值
  3条记录以上就错了:订单表里的cost结果为0,原因是a.cost=a.price*a.quality中的a.price为0,
  但字段中a.price确有正确值的...

  上面SQL的工作过程是怎样的? 是先逐个计算SQL里的参数,最后再update,还是逐个计算update的?

------解决方案--------------------
看不明白,你所说的现象似乎不太可能出现。

这样,

给出你的 create table , insert into 语句,和试验步骤,这样别人可以在自己的机器上再现你的问题以便分析。
------解决方案--------------------
SQL code
mysql> INSERT INTO `account` (`id`, `username`, `uid`, `basefund`, `moneyfund`,
`kymoneyfund`, `totalfund`, `totalstockfund`, `totalbargainfund`, `totalprofitor
lossfund`, `rate`, `dayrate`, `weekrate`, `monthrate`, `yearrate`, `dayrank`, `w
eekrank`, `monthrank`, `yearrank`, `statupdatetime`, `createtime`, `matchid`, `a
ccountcode`, `accounttype`, `accountlimits`, `bargainlimits`) VALUES
    -> (39, '测试用户', 1, 100000.00, 86948.00, 45181.60, 894728.00, 807780.00,
13000.00, 794728.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0, 0, 0, 0, 0, 1270135562, 0,
 '1-0', 1, '0', NULL),
    -> (40, '测试用户', 1, 10000000.00, 8564280.00, 8564280.00, 9204780.00, 6405
00.00, 1430000.00, -795220.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0, 0, 0, 0, 0, 1270
136442, 3, '1-3', 2, '0', NULL);
ERROR 1054 (42S22): Unknown column 'rate' in 'field list'
mysql>