update a as a set a.damage=(SELECT damage FROM b AS b WHERE b.id = a.id) where a.team_id=28;
这个是先执行的where,出来一个a.team_id=28的临时表,然后join b on b.id = a.id,然后再把damage update到a.damage么

解决方案 »

  1.   

    不是。
    MYSQL的执行顺序是。
    1) 打开A表,找到  where a.team_id=28;的记录
    2)取出符合条件的一条记录,然后进行 SELECT damage FROM b AS b WHERE b.id = a.id 此时的a.id 是第一条符合条件记录中的ID,
    3) 得到值后进行  a.damage= 步骤2中得到的值。
    4) 循环至步骤2,直至所有A中符合条件记录更新完毕。
      

  2.   

    效率和batch是一个数量级的么
      

  3.   

    更常用的写法是
    update a inner join b on a.id = b.id set a.damage=b.damage where a.team_id=28;
    效率如何,则建议自己测试一下。
      

  4.   

    改起来还真不好改,select里面其实是我简化的,其实里面也是个join