本帖最后由 yilin54 于 2013-01-18 15:14:12 编辑

解决方案 »

  1.   

    1、这个你自己备份一个表然后测试一下就知道了。
    2、我喜欢这样写,你那个写法太混乱了,好像还有错:
    UPDATE b  
    set b.智商值 =a.智力值
    FROM 智力表 a INNER JOIN 学生表  b ON a.姓名=b.姓名 AND b.省份='浙江'
      

  2.   

    可以用事务执行以下,看看效果就知道了,效果应该是一样的begin tran
    update 学生表 set 智商值 =(select 智商值 from 智力表 where 智力表.姓名 = 学生表.姓名) where  学生表.省份='浙江'select * from 学生表 where 省份='浙江'
    rollbackbegin tran
    update 学生表 set 智商值 =(select 智商值 from 智力表 where 智力表.姓名 = 学生表.姓名 and 学生表.省份='浙江') select * from 学生表 where 省份='浙江'
    rollback
    --如果确认没问题可以用commit提交还有一点,关联最好要用学号,不要用姓名,如果有重名的学生,你的语句就要报错了
      

  3.   

    Quote: 引用 3 楼 yilin54 的回复:

    引用 1 楼 DBA_Huangzj 的回复:
    1、这个你自己备份一个表然后测试一下就知道了。
    2、我喜欢这样写,你那个写法太混乱了,好像还有错:
    SQL code
    ?123UPDATE b   set b.智商值 =a.智力值 FROM 智力表 a INNER JOIN 学生表  b ON a.姓名=b.姓名 AND b.省份='浙江'
    试了下,,你这个……[/qu当然是时间问题了,你的第二个用的是两张表相互穿插关联,学生表(智力表)的数据太多,导致时间过长;第一个只是在学生表中进行关联,不涉及智力表,时间复杂度降低,所以时间要快的多;而#1的写法用到了存储过程,效率大大的提高